从Matlab的Fig图片中提取数据,并保存成csv文件

从Matlab的Fig图片中提取数据,并保存成csv文件


本人亲自实测有效,但能力有限,目前仅用代码测试了 Figure图片单线条和双线条的提取(多线条可模仿双线条代码)。很多帖子的代码不是不全就是仅限于单线条提取的,自己摸索了两天才弄出来。 提取数据目的:通过从Matlab中的Figure图片提取数据,再利用python进行重新绘制,使得科研论文图片效果更佳。

1.Fig图像是由单条曲线绘制

前提:要从Matlab中的Fig图片提取数据,首先会用Matlab中画出Fig图片,然后保存成fig文件,记得文件格式后缀是".fig"。
正文

  1. Matlab中的Fig图像曲线在工作空间是以矩阵形式保存的,在工作区可以查看,这里不细讲。
  2. 将曲线数据提取,也就是将x和y轴的数据分成两列保存到表格中,可以保存为excelcsv格式,这里保存为csv是本人工作需要。
  3. 单条曲线的提取还是比较简单,本人将代码详细贴出来,请参考:
%%将matlab的fig文件提取到csv或者excel中,且保留行列格式
%%单曲线单坐标情况

%1
open('图片.fig')%打开fig格式图片
handle = findobj(gca,'Type','line');%获取曲线的handle,如果图中有多条曲线,handle为一个数组
xdata = get(handle,'XData');%将handle的x数据赋给xdata一维数组
ydata = get(handle,'YData');%将handle的y数据赋给ydata一维数组
data = [xdata',ydata'];  % 将数据组集到data,将x和y数据写进一个二维数组
[m, n] = size(data);    %得到数据的数据长度        
data_cell = mat2cell(data, ones(m,1), ones(n,1));  % 将data切割成m*n的cell矩阵
title = {'x列数据的称呼''y列数据的称呼'};     % 添加变量名称,csv首行的每一列的名称,单曲线只有x和y名称
result = [title; data_cell];           % 将变量名称和数值组集到result
s = xlswrite('图片.csv', result);     %保存为csv格式文件,名字为“图片”
  

2.Fig图像是由双条曲线绘制

正文:请配合本人代码食用效果更佳

  1. 在上面有说到,Fig数据在Matlab中以数组形式存放,一条曲线的数据存放在一个方格,对于双线条而言,在Matlab的工作区里有两格存放,也就是有两个m*n的矩阵。
  2. handle就是数据的句柄,也就是指向,handle(1)指向第一个方格的矩阵,handle(2)指向第二个方格的矩阵。
  3. 关于双曲线的表格首行称呼问题,这也是其他帖子没有说到的问题,两条曲线也就代表着表格里有四列数据,如何使每条曲线的x和y按列导出到csv或excel呢?关键是data_cell_1和data_cell_2分割功能,然后用title_1和title_2表示称呼,再使用result_1和result_2将每条曲线x和y数据写成一个类似的二维数组(每列数据首行是"称呼"),最后保存的时候记得保存,只需将每条曲线的数据保存到统一文件下就行。
  4. 'C1:D5’的意思是表格的C列第一格,D列的第五格,这是因为我的第二条曲线是散点图,只有四个点,加上称呼,所以长度是两列五行。
%%将matlab的fig文件提取到csv或者excel中,且保留行列格式
%%双曲线单坐标情况

open('图片1.fig')
handle = findobj(gca,'Type','line');%获取曲线的handle,如果图中有多条曲线,handle为一个数组
xdata1 = get(handle(1),'XData');%handle是1*2数组,handle(1)是第一个位置,存储一个矩阵
ydata1 = get(handle(1),'YData');
xdata2 = get(handle(2),'XData');%handle是1*2数组,handle(2)是第二个位置,存储一个矩阵
ydata2 = get(handle(2),'YData');
data1 = [xdata1',ydata1'];  % 将数据组集到data1
data2 = [xdata2',ydata2'];  % 将数据组集到data2
[m, n] = size(data1);            
data_cell_1 = mat2cell(data1, ones(m,1), ones(n,1));  % 将data1切割成m*n的cell矩阵
[m, n] = size(data2);            
data_cell_2 = mat2cell(data2, ones(m,1), ones(n,1));  % 将data2切割成m*n的cell矩阵
title_1 = {'x1列数据的称呼''y1列数据的称呼'};     % 添加变量名称
title_2 = {'x2列数据的称呼''y2列数据的称呼'};     % 添加变量名称
result_1 = [title_1; data_cell_1];    % 将变量名称和数值组集到result
result_2 = [title_2; data_cell_2];    % 将变量名称和;数值组集到result

s = xlswrite('图片1.csv', result_1); %将 result_1写到表格前两列
s = xlswrite('图片1.csv', result_2,'C1:D5');%将 result_2写到表格后两列
  

3.小结

上述如有不当之处,请大家提出指正,欢迎交流。
如需转载,请标明出处,谢谢各位!

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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 的图形命令进行访问和操作,并将所需数据导出保存为适当的格式。同时需要注意,不同的图形对象可能需要使用不同的命令进行访问,具体细节需要依据具体情况而定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值