Extracting data from Matlab .fig with 2 different y-axes?
Afficher commentaires plus anciens
I have a figuer with two different y-axes, and i would like to extract both of the data with its relevant x-axis data. I have used the following script, but their is an error when writing axesObj(2)!
fig=openfig('MyFig.fig');
axesObj = get(gcf, 'Children');
datObj1 = get(axesObj(1), 'Children');
datObj2 = get(axesObj(2), 'Children');
xdat1 = get(datObj1, 'XData');
ydat1 = get(datObj1, 'YData');
xdat2 = get(datObj2, 'XData');
ydat2 = get(datObj2, 'YData');
3 commentaires
Image Analyst
le 22 Juin 2022
You forgot to attach MyFig.fig.
Why are you trying to get it from a fig file in the first place? Don't you have the original data? If it has to be transferred via a disk file, I'd recommend using save to write a .mat file instead of a .fig file.
If you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:
Jan
le 22 Juin 2022
@Bakr Abdelgaliel: Whenever you mention an error in the forum, attach a copy of the complete meesage. It is easier to fix an error than to guess, what the error is.
Bakr Abdelgaliel
le 22 Juin 2022
Réponse acceptée
Plus de réponses (1)
dpb
le 22 Juin 2022
The two y-axes could have been drawn w/ the yyaxis function in which case there aren't actually two separate axes -- and it's not the axes you're tying to get, anyways, but the line handles...
While strongly agree w/ @Image Analyst that the way/time to do/have done this was when the figure was created and had the data to create it with instead -- but, there are occasional reasons such as the figure came from elsewhere that it's necessary to scrape the figure file --
hL=findobj(gcf,'type','line'); % return the line handle(s) of the figure
xData=arrayfun(@(hL)hL.XData.',hL,'UniformOutput',1); % return cell array of size number lines found
yData=arrayfun(@(hL)hL.YData.',hL,'UniformOutput',1);
1 commentaire
dpb
le 22 Juin 2022
hF=openfig('MyFig.fig');
hL=findobj(gcf,'type','line');
x=arrayfun(@(hL)hL.XData.',hL,'UniformOutput',0);
y=arrayfun(@(hL)hL.YData.',hL,'UniformOutput',0)
y =
2×1 cell array
{18×1 double}
{18×1 double}
>>
gets you there more directly...
Catégories
En savoir plus sur Spreadsheets dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

