我知道这很基础,但我是MATLAB的新手。在打开.fig文件之后,如何在命令窗口中使用绘制的数据?我只看到了图表。我不确定如何获得数据。
实际上,为了获取数据,您甚至不需要显示图像。 FIG文件存储在标准的Matlab MAT格式中,您可以使用内置的load()函数来读取。图形句柄和数据存储在一个结构中,您可以轻松理解和处理。
这里有一个非常简单的方法:
点击要获取数据的对象。没有任何提示表明您已经点击了它。
>> xd = get(gco,'XData');
>> yd = get(gco,'YData');
有时候点击行或其他对象本身可能会比较困难。如果你遇到这个问题,请点击包含你所感兴趣的子元素的轴,然后:
Sometimes it can be hard to click on the line, or other object, itself. If you have this problem, click on the axes that contains the child(ren) you are interested in, then:
>> kids = get(gca,'Children');
这将给你一个指向不同子元素的句柄数组。你可以通过索引kids来逐个获取它们,也可以使用以下方法一次性获取所有数据。这将以cell数组形式返回结果,如果你以前没有使用过它们,可能有些棘手:
>> xd = get(kids,'XData');
>> yd = get(kids,'YData');
>> xd1 = xd{1}; %# X Data from first line
尝试使用hgload函数,然后浏览它返回的图形句柄结构。例如,如果您绘制并保存以下内容:
x=0:.01:10;
y=sin(x);
h=plot(x,y);
saveas(h,'testfigure.fig');
清理您的工作区,并使用hgload打开保存的图像:
clear
close all
h=hgload('testfigure.fig');
您可以通过调用以下方式来检查图形的句柄h:
get(h)
通过调用相关函数可以进一步探索坐标轴、标题和图例。
ch=get(h,'Children');
如果您正在使用我示例中的代码,则应该只有一个子项,即坐标轴。调用坐标轴的子项,您应该只有一条线。l=get(ch,'Children');
接下来,调用线条的“Xdata”和“Ydata”字段,即可获得原始数据。
x=get(l,'Xdata');
y=get(l,'Ydata');
如果你的图形比轴线更复杂,那就有点棘手了。你需要探索每个子元素,确定它是否是你想要从中提取数据的绘图。
lineH = findobj(h,'type','line')
。如果有多个线条,你只想要红色的那一条,可以使用findobj
加上多个搜索条件,例如redLineH = findobj(h,'type','line','color','r');
。 - Jonas