Extract scattered data from fig
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
mariana mahamud
le 13 Mai 2019
Commenté : Adam Danz
le 14 Mai 2019
I want to extract data from a lot of graph fig files. My data are consist of scattered points in a graph. I used the code below however there is nothing in the x and y variables. How to fix this?
clc
clear all
addpath(genpath('PIV TEST 2'))
for k = 2:21
h = openfig(sprintf('%d.fig',k));
h = findobj(gca,'Type','line');
x = get(h,sprintf( 'XData',k));
y = get(h, sprintf('YData',k));
end
Is there anything wrong in my coding?

2 commentaires
Adam Danz
le 13 Mai 2019
Are the figures opening? Do you get any error or warning messages? Have you tried running the loop through manually and looking at what happens on each line? What have you done so far in the problem solving phase?
These two lines are definitely wrong.
x = get(h,sprintf( 'XData',k)); % should be get(h, 'XData')
y = get(h, sprintf('YData',k)); % same
Also, you're not storing the loop variables anywhere. They are being overwritten on each loop.
Lots of stuff to fix here.
Réponse acceptée
Adam Danz
le 14 Mai 2019
Modifié(e) : Adam Danz
le 14 Mai 2019
Here is a cleaned-up version of your code that finds any and all objects in the specified figure that contain an "XData" property. It will work no matter how the plots were produced (line, scatter, etc).
I suggest storing the (x,y) values in a cell array.
x = cell(20,1);
y = x;
for k = 2:21
fh = openfig(sprintf('%d.fig',k));
h = findobj(fh,'-Property', 'XData'); %any object with property "XData" on figure fh
x{k} = get(h,'XData');
y{k} = get(h,'YData');
end
If more than one object was located, x and y will be a cell array containing one element for each object.
2 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Creating, Deleting, and Querying Graphics Objects dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!