How to extract data from multiple Matlab figures

Hello everyone, I have extracted data from Matlab figure saved in “.fig” format by using the following code
open F1.fig %%F1.fig is the first figure
D = get(gca, 'children')
x=get(D, 'xdata');
y=get(D,'ydata');
z=get(D,'cdata');
x, y, and z are the extracted data of x,y and z components.For only one case I have total 90 figures so by using the above code for each figure take much time. Now I need to use the above code for all 90 figures and get the data at once. I tried by using for loop but it does not work. Thanks

 Accepted Answer

dinfo = dir('*.fig')
fignames = {dinfo.name};
numfig = length(fignames);
x = cell(numfig, 1);
y = cell(numfig, 1);
z = cell(numfig, 1);
for K = 1 : numfig
figfile = fignames{K};
try
fig = openfig(figfile);
ax = get(fig, 'CurrentAxes');
if ~isempty(ax)
D = get(ax, 'Children');
x{K} = get(D, 'XData');
y{K} = get(D, 'YData');
z{K} = get(D, 'ZData');
else
fprintf('note: file "%s" has empty current axes\n', figfile);
end
close(fig);
catch ME
fprintf('note: file "%s" could not be opened as figure\n', figfile);
end
end

5 Comments

@y Walter Roberson thanks for response actually your given code is good but it does not give x,y and z component for each figure. For example, I have 90 figures and for each figure x=1*8, y=1*33 and z=133*8. I need to save these three components for each fig also.
Are you trying to recreate the x, y, and z that were used to create a plot using
plot3(x, y, z)
where x and y were vectors and z was a 2D array?
@ Walter Roberson, I do not try for plotting plot3(x, y, z). I need to extract x,y and z components of each figure and then saved all x components separately, all y components separately and all z components separately.
That is what my code already does. It creates cell arrays, x, y, and z, each of which has one entry per figure. For figures in which there was only one axes child, the entry will be a numeric vector. For figures in which there was more than one axes child, the entry will be a cell array of numeric vectors, one entry per child.
You have a number of figures, and each figure has an unknown number of axes children, so you nested structures are to be expected.
@ Walter Roberson thanks. Now I found it work good.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!