前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab自动提取保存在figure里面的x和y轴数据

matlab自动提取保存在figure里面的x和y轴数据

作者头像
用户9925864
发布2024-01-22 15:31:20
2010
发布2024-01-22 15:31:20
举报

经常有读者咨询fig文件里面的x和y轴的数据如何提取,故分享总结一下这个基础方法,在一些场景下面,对方不会把源代码提供,只会提供一个figure来做交互和结果查看,这时候如果想重新绘制figure增加内容,就需要提取figure图的数据,

1、保存一个figure文件

代码语言:javascript
复制
clear
clc
close all

x = 0:0.1:10;
y = sin(x);
figure
plot(x,y)
saveas(gcf,'y.fig');

fig文件作为Matlab中的图形文件,其实原始数据是会存储在figure对象中的,那么通过get函数获取figure对象中相应的数据属性,就可以得到fig图形中的数据。

2、提取figure数据的步骤

提取fig文件数据的方法为:

  • 第一步:打开图形(.fig)文件
代码语言:javascript
复制
open("y.fig")
  • 第二步:获取曲线(line)句柄;
代码语言:javascript
复制
hl = get(gca,'Children');    % 获取坐标轴的子对象:Line对象
ha = get(gcf,'Children');  % 获取当前的图形的子对象:Axes坐标轴对象

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

代码语言:javascript
复制
xdata = get(hl,'XData');
ydata = get(hl,'YData');

结果

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

这个时候数据就在xdata和ydata,可以进行二次绘图。

3、针对特殊情况的处理

3.1 subplot的figure

代码语言:javascript
复制
x = 0:0.1:10;
y = sin(x);
y2 = cos(x)
figure
subplot(211)
plot(x,y)
subplot(212)
plot(x,y2)
saveas(gcf,'yy2.fig');
代码语言:javascript
复制
clear
clc
close all
open("yy2.fig") 

figure_info=findall(gcf,'type','line');

xc1=get(figure_info(1,:),'xdata');
yc1=get(figure_info(1,:),'ydata');  
xc2=get(figure_info(2,:),'xdata');  
yc2=get(figure_info(2,:),'ydata') ;

subplot的就需要做遍历,同时做好数据的对应,对应哪个subplot

3.2 三维图

代码语言:javascript
复制
%% 
clear
clc
close all

x = 0:0.1:10;
y = sin(x);
y2 = cos(x)

figure
plot3(x,y,y2)
saveas(gcf,'xyy2.fig');
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档