如何从MATLAB中的.fig文件中提取数据?

syl*_*ter 22 matlab plot file figure

我知道这是非常基础的,但我是MATLAB的新手.打开.fig文件后,如何在命令窗口中实际使用绘制的数据?我只看到情节.我不确定如何实际获取数据.

Yai*_*man 17

实际上,您甚至不必显示图形以获取数据.FIG文件以标准的Matlab MAT格式存储,您可以使用内置的load()函数读取.图形句柄和数据存储在您可以轻松理解和处理的结构中.

  • 我发布了一篇关于此的详细文章:http://undocumentedmatlab.com/blog/fig-files-format/ (3认同)

小智 13

这是一个非常简单的方法:

单击要从中获取数据的对象.没有任何迹象表明您已点击它.

>> xd = get(gco,'XData');
>> yd = get(gco,'YData');
Run Code Online (Sandbox Code Playgroud)

有时可能很难点击该行或其他对象本身.如果您遇到此问题,请单击包含您感兴趣的子项的轴,然后:

>> kids = get(gca,'Children');
Run Code Online (Sandbox Code Playgroud)

这将为您提供各种孩子的句柄数组.您可以尝试通过索引到孩子中逐个获取一个,或使用以下内容一次获取所有数据.这会将结果作为单元格数组返回,如果您之前没有使用它们,这可能有点棘手:

>> xd = get(kids,'XData');
>> yd = get(kids,'YData');
>> xd1 = xd{1}; %# X Data from first line
Run Code Online (Sandbox Code Playgroud)


Dor*_*oom 10

尝试hgload,然后围绕它返回的图形句柄结构.例如,如果您绘制并保存以下内容:

x=0:.01:10;
y=sin(x);
h=plot(x,y);
saveas(h,'testfigure.fig');
Run Code Online (Sandbox Code Playgroud)

清除工作区,并使用hgload打开保存的图形:

clear
close all
h=hgload('testfigure.fig');
Run Code Online (Sandbox Code Playgroud)

您可以通过调用来检查图形的手柄h

get(h)
Run Code Online (Sandbox Code Playgroud)

或者通过致电深入研究轴/标题/传说

ch=get(h,'Children');
Run Code Online (Sandbox Code Playgroud)

如果您在我的示例中使用代码,那么您应该只有一个子图形,即轴.打电话给轴的孩子,你应该有一条线.

l=get(ch,'Children');
Run Code Online (Sandbox Code Playgroud)

接下来,调用该行的"Xdata"和"Ydata"字段,即可得到原始数据.

x=get(l,'Xdata');
y=get(l,'Ydata');
Run Code Online (Sandbox Code Playgroud)

如果你有一个比轴更复杂的数字,它会变得更加困难.您需要探索每个孩子以确定它是否是您想要从中提取数据的图.

  • 您可以直接搜索直线控制柄(尽管您应该首先关闭图例).例如:`lineH = findobj(h,'type','line')`.如果你有多行,而你只想要红色,你可以使用带有多个搜索条件的`findobj`,例如`redLineH = findobj(h,'type','line','color','r') ;` (4认同)

Jor*_*wis 2

使用 HGLOAD 命令。可以参考这里