Extracting data from Matlab .fig with 2 different y-axes?
11 views (last 30 days)
Bakr Abdelgaliel on 22 Jun 2022
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)!
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');
Star Strider on 22 Jun 2022
Try something like this —
x = linspace(0, 10);
y1 = sin(2*pi*x/max(x));
y2 = exp(-0.2*x) .* cos(3*pi*x/max(x));
Lines = findobj(gca, 'Type','line'); % 'Right' Line Is 'Line(1)', 'Left' Line is 'Line(1)'
RightX = Lines(1).XData;
RightY = Lines(1).YData;
LeftX = Lines(2).XData;
LeftY = Lines(2).YData;
This could be version-dependent. However this should work with recent MATLAB versions.
More Answers (1)
dpb on 22 Jun 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