Matlab如何提取fig文件中的数据

1. 原理

有时候运行的程序只保存了fig文件,而没有保存原始数据,当需要对fig文件中的数据进行分析和处理时就会犯难了。本文详细介绍Matlab如何提取fig文件中的数据,并提供原创的m函数,可方便实现各类figure图形提取数据。
fig文件作为Matlab中的图形文件,其实原始数据是会存储在figure对象中的,那么通过get函数获取figure对象中相应的数据属性,就可以得到fig图形中的数据。
例如现在有一个保存的图形:
在这里插入图片描述
第一步:打开fig文件;
第二步:获取line句柄

ha = get(gcf,'Children');  % 获取当前的图形的子对象:Axes坐标轴对象
hl = get(ga,'Children')    % 获取坐标轴的子对象:Line对象

第三步:获取line对象的xdata、yadata属性

xdata = get(hl,'XData');
ydata = get(hl,'YData');

结果:

hl = 
  Line - 属性:
              Color: [0 0.4470 0.7410]
          LineStyle: '-'
          LineWidth: 0.5000
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [1×500 double]
              YData: [1×500 double]
              ZData: [1×0 double]

读取的数据:
在这里插入图片描述
可以看出绘制曲线的原始数据保存在line对象中,而line对象是axes的子对象,axes是figure的子对象。获取原始数据的思路是:先找出figure对象的所有axes子对象,再找出每个坐标轴的所有line子对象,最后获取每条line的XData、YData、ZData属性,得到原始数据。

2. 函数

可是,当figure图形中的坐标轴很多或线条很多,或者需要对大量figure图形进行批量处理时,上面的方法就很繁琐,不便于操作。为此作者开发了函数Fun_GetFigData.m,可以方便的提取各种类型figure图形文件的原始数据。

function [XYZdata,Str] = Fun_GetFigData( hf,filename )
% XYZdata = Fun_GetFigData( hf ) 获取figure图的
% Str表头字符串
% hf  Figure图形句柄 或 Figure文件名(必须带扩展名.fig)
% XYZdata 坐标数组
% filename 保存为xls文件的名称,不输入或输入0时不保存xls文件
%                              输入非零数值时,保存成xls文件,文件名与figure文件名相同
%                              输入filename时按照输入的字符串保存成xls文件
%                              注意filename不带扩展名.xls
% Str 为与XYZdata一一对应的字符串cell数组,用于说明每列数据的表头,在保存为xls文件时保存为表头
% 文件调用规则,请打开下面例子
% open Test_Fun_GetFigData

3. 例程演示

例1:提取单坐标轴单曲线二维图原始数据

t = linspace(0,10,500);
y = sin(t);
hf = figure;
plot(t,y)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果:
返回值 XYZdata = [Xdata Ydata],第一列为X轴坐标数据,第二列为Y轴坐标数据。
在这里插入图片描述

例2:提取单坐标轴双曲线二维图原始数据(横坐标相同)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
plot(t,y1,t,y2)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果: 在这里插入图片描述
返回值 XYZdata = [Xdata Ydata1 Ydata2],第一列为X轴坐标数据,第二列为曲线1的Y轴坐标数据,第三列为曲线2的Y轴坐标数据。

例3:提取单坐标轴双曲线二维图原始数据(横坐标维数相同,但数值不同)

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,500);
y2 = cos(t2);
hf = figure;
plot(t1,y1,t2,y2)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果: 在这里插入图片描述
返回值 XYZdata = [Xdata1 Ydata1 Xdata2 Ydata2],第一列为曲线1的X轴坐标数据,第二列为曲线1的Y轴坐标数据,第三列为曲线2的X轴坐标数据,第四列为曲线2的Y轴坐标数据。

例4:提取单坐标轴双曲线二维图原始数据(横坐标维数不同)

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,200);
y2 = cos(t2);
hf = figure;
plot(t1,y1,t2,y2)
XYZdata = Fun_GetFigData( hf );

结果:

XYZdata =
  1×2 cell 数组
    {200×2 double}    {500×2 double}

返回值为1×2维cell数组,XYZdata{1,1} = [坐标轴1、曲线1的数据],XYZdata{1,2} = [坐标轴1、曲线1的数据]。

例5:提取双坐标轴多曲线二维图原始数据

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,200);
y2 = cos(t2);
hf = figure;
plot(t1,y1,t2,y2)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果:

XYZdata =
  2×1 cell 数组
    {500×3 double}
    {500×2 double}

返回值为2×1维cell数组,XYZdata{1,1} = [坐标轴1的数据],XYZdata{2,1} = [坐标轴2的数据]。

例6:提取多子图曲线二维图原始数据

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
y3 = tan(t);
y4 = cot(t);
hf = figure;
subplot(221)
plot(t,y1)
subplot(222)
plot(t,y2)
subplot(223)
plot(t,y3)
subplot(224)
plot(t,y4)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果:

XYZdata =
  4×1 cell 数组
    {500×2 double}
    {500×2 double}
    {500×2 double}
    {500×2 double}

返回值为4×1维cell数组,XYZdata{1,1} = [坐标轴1的数据],XYZdata{2,1} = [坐标轴2的数据] ,XYZdata{3,1} = [坐标轴3的数据],XYZdata{4,1} = [坐标轴4的数据]。

例7:提取双纵坐标轴曲线二维图原始数据

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
plotyy(t,y1,t,y2)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果:

XYZdata =
  2×1 cell 数组
    {500×2 double}
    {500×2 double}

返回值为2×1维cell数组,XYZdata{1,1} = [坐标轴1的数据],XYZdata{2,1} = [坐标轴2的数据]。

例8:提取单坐标轴曲线三维图原始数据

t = linspace(0,10,500);
y = sin(t);
z = cos(t);
hf = figure;
plot3(t,y,z)
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果:
在这里插入图片描述
返回值 XYZdata = [Xdata Ydata Zdata],第一列为X轴坐标数据,第二列为Y轴坐标数据,第三列为Z轴坐标数据。

例9:提取单坐标轴曲线三维曲面图原始数据

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
hf = figure;
surf(X,Y,Z);
XYZdata = Fun_GetFigData( hf );

在这里插入图片描述
结果: 在这里插入图片描述
返回值 XYZdata = [Xdata Ydata Zdata],第一列为X轴坐标数据,第二列为Y轴坐标数据,第三列为Z轴坐标数据。

例10:提取原始数据,并将原始数据保存为xls文件(指定文件名)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
plotyy(t,y1,t,y2)
XYZdata = Fun_GetFigData( hf,'双坐标轴数据' ); % 指定文件名

结果:
在这里插入图片描述
按照指定文件名保存“双坐标轴数据.xls”文件,每个坐标轴单独存成一个工作表(sheet),曲线存储在该坐标轴所对应的工作表中。

例11:提取原始数据,并将原始数据保存为xls文件(不指定文件名)

x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
figure
contour(X,Y,Z);
saveas(gcf,'等高线图');   % 保存当前figure为'等高线图.fig'
XYZdata = Fun_GetFigData( '等高线图.fig',1 );

在这里插入图片描述
结果:
按照与fig文件相同的文件名保存“等高线图.xls”文件,数据存储在该坐标轴所对应的工作表中。
在这里插入图片描述

例12:提取原始数据,并将原始数据保存为xls文件(使用默认文件名)

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,200);
y2 = cos(t2);
hf = figure;
subplot(211)
plot(t1,y1,t2,y2)
subplot(212)
plot(t1,10*y1)
XYZdata = Fun_GetFigData( hf,1 );

在这里插入图片描述
结果:

XYZdata =
  2×2 cell 数组
    {500×2 double}    {  0×0 double}
    {200×2 double}    {500×2 double}

在这里插入图片描述

返回值XYZdata为2×2维cell数组,XYZdata{ii,jj} = [坐标轴ii、曲线jj的数据]。按照与默认文件名保存“图形数据.xls”文件,每个坐标轴中的每条曲线都单独存成一个工作表(sheet),数据存储在对应的工作表中。

联系作者

有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。
更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans

源程序下载:
1. csdn资源: Matlab如何提取fig文件中的数据
2. 扫码关注微信公众号Matlab Fans,回复BK05获取百度网盘下载链接。

在这里插入图片描述

### 回答1: MATLAB 是非常流行的科学计算软件,它支持将可视化结果保存到 fig 文件。一旦 fig 文件被保存下来,就可以用 MATLAB 进行后续的数据提取和分析,以便深入研究这个图像。 在 MATLAB ,可以使用 load 命令打开 fig 文件,如下所示: load('figurename.fig') 这将在 MATLAB 工作空间创建一个名为 `h` 的变量,它包含了图像的句柄。要提取数据,可以使用 `get` 命令,如下所示: xdata = get(h, 'XData'); ydata = get(h, 'YData'); 这将从 fig 文件提取 X 和 Y 轴的数据,并将它们存储在 `xdata` 和 `ydata` 变量。这些变量现在可以在 MATLAB 进行进一步的分析和处理,包括绘图、统计分析和建模等。 除了 X 和 Y 数据之外,还可以使用类似的方法来提取其他图像属性,包括标题、标签、颜色和样式等。这些属性可以直接从图像对象提取,从而轻松地对它们进行自定义修改和进一步分析。 综上所述,MATLAB fig 文件提取数据的过程非常简单,只需要使用 load 和 get 命令即可。它可以帮助研究人员深入了解图像数据特征,并进行后续分析和建模,从而加深对数据的理解和认识。 ### 回答2: MATLABFIG格式文件是一种特殊的图形文件,其包含了绘图所需的所有信息,包括绘图的坐标轴、颜色选项、标签等等。如果需要从FIG文件提取数据,可以通过以下步骤实现: 1. 打开MATLAB软件并导入FIG文件,可以使用命令:openfig('filename.fig'); 2. 在命令窗口输入命令:h = gcf;获得当前绘图的句柄,即h; 3. 使用命令:get(h),查看当前绘图的属性和对象信息; 4. 使用命令:h.Children,查看绘图的子对象信息,例如line对象、patch对象等等; 5. 对于line对象,可以使用函数:XData和YData获得绘图数据; 6. 对于其他对象,也可以使用类似的方法,根据需要进行提取和处理。 需要注意的是,从FIG文件提取数据可能会遇到一些困难,例如绘图对象的多层嵌套、曲线的复杂形状等等。因此,在实现过程需要仔细分析FIG文件的结构,并根据需要选择合适的提取方法和技术。 ### 回答3: MATLAB fig 文件MATLAB 保存图形的文件格式,包括图形的设置、数据和样式等。通常情况下,我们会利用 fig 文件来保存受处理后的图形或作为数据交流的一种方式。 如果要从 fig 文件提取数据,有以下几个步骤: 1.打开 fig 文件 使用 MATLAB 打开 fig 文件,可以使用命令 “openfig”。 2.访问图形数据 在打开 fig 文件之后,可以使用各种图形命令来访问其数据。利用 “get” 命令可以获取图形对象的属性信息,例如可以使用 “get(gca, 'ylim')” 命令来获取坐标轴的 Y 轴范围。 3.导出图形数据 可以利用 MATLAB 的导出命令来将数据导出。如果要导出图形数据,可以首先使用 “get” 命令获取数据并存储在变量,然后使用 “save” 命令将其保存为.mat 文件,以便后续使用。 总的来说,从 MATLAB fig 文件提取数据的过程需要通过 MATLAB 的图形命令进行访问和操作,并将所需数据导出保存为适当的格式。同时需要注意,不同的图形对象可能需要使用不同的命令进行访问,具体细节需要依据具体情况而定。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatlabFans_Mfun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值