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

matlab自动提取保存在figure里面的x和y轴数据(增加了后面漏的代码)

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

昨天文章发出去才发现少了部分代码遗漏了,今天补上 经常有读者咨询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');
代码语言:javascript
复制
open("xyy2.fig") 
% h = figure

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



xdata = get(hl,'XData');
ydata = get(hl,'YData');
zdata = get(hl,'ZData');
figure
plot3(xdata,ydata,zdata)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档