extracting data series from *.fig file

349 visualizaciones (últimos 30 días)
Petr
Petr el 10 de Mzo. de 2011
Comentada: John Mikhail el 28 de Jul. de 2023
Hi there,
I have a figure file, but not the original data.
Is there a way to extract the data array from the 2D plot, opened from *.fig file?
Thanks in advance,
Petr.
  1 comentario
shubham kumar gupta
shubham kumar gupta el 10 de Sept. de 2022
many a time it may happen you really get confused by varying answers non of them working
So follow this
S = load('MyFigure.fig', '-mat');
Now open S and go to children -> children -> Properties
Now search for CData, or XData, YData & ZData
you can export these variables

Iniciar sesión para comentar.

Respuesta aceptada

Paulo Silva
Paulo Silva el 10 de Mzo. de 2011
open data.fig %open your fig file, data is the name I gave to my file
D=get(gca,'Children'); %get the handle of the line object
XData=get(D,'XData'); %get the x data
YData=get(D,'YData'); %get the y data
Data=[XData' YData']; %join the x and y data on one array nx2
%Data=[XData;YData]; %join the x and y data on one array 2xn
  3 comentarios
Amir
Amir el 18 de Jul. de 2016
Awesome! totally saved my time on retrieving the data. Works on 2016
Omar Velazquez
Omar Velazquez el 25 de Mzo. de 2020
@Paulo Silva - You have saved my life. Many thanks

Iniciar sesión para comentar.

Más respuestas (3)

Petr
Petr el 10 de Mzo. de 2011
Editada: Walter Roberson el 19 de Sept. de 2015
err.. tried it, it tells me
>> D=get(gca,'Children');
>> XData=get(D,'XData');
??? Error using ==> get
Invalid property found.
Object Name : hggroup
Property Name : 'XData'.
It's MATLAB 7.10.0 (R2010a)
  4 comentarios
Joseph
Joseph el 19 de Sept. de 2015
Editada: Walter Roberson el 19 de Sept. de 2015
This code generated an error:
openfig(figureFile);
D = get(gca,'Children');
Child = get(D);
??? Error using ==> get
Objects must all be instances of the same class.
Walter Roberson
Walter Roberson el 19 de Sept. de 2015
hfig = openfig(figureFile);
d = findall(hfig, '-property', 'xdata');
xydatas = arrayfun(@(h) get(h, {'xdata','ydata', 'type'}), d, 'Uniform', 0);
Now xydatas will be a cell array with one entry for each object in the plot that has an xdata property. Each of the cells will have three elements: the xdata information, the ydata information, and the name of the type of the object. Different kinds of objects might be included, depending on what was drawn in the plot.
The original question is not precise about what kind of 2D plot is present. For example, lines, surfaces, patches, and scatter plots are all 2D plots that have xdata properties.

Iniciar sesión para comentar.


shubham kumar gupta
shubham kumar gupta el 10 de Sept. de 2022
  1 comentario
John Mikhail
John Mikhail el 28 de Jul. de 2023
Most convenient answer I've found by far

Iniciar sesión para comentar.


Petr
Petr el 10 de Mzo. de 2011
Thanks, it works!
Probably, something was wrong with my file.
  1 comentario
Walter Roberson
Walter Roberson el 10 de Mzo. de 2011
Probably not, hggroup are not uncommon for some kinds of plots. In future you could use findobj() to locate the objects that have xdata.

Iniciar sesión para comentar.

Categorías

Más información sobre Graphics Object Identification en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by