|
汽车零部件采购、销售通信录 填写你的培训需求,我们帮你找 招募汽车专业培训老师
昨天文章发出去才发现少了部分代码遗漏了,今天补上
经常有读者咨询fig文件里面的x和y轴的数据如何提取,故分享总结一下这个基础方法,在一些场景下面,对方不会把源代码提供,只会提供一个figure来做交互和结果查看,这时候如果想重新绘制figure增加内容,就需要提取figure图的数据,
1、保存一个figure文件
clearclcclose all
x = 0:0.1:10;y = sin(x);figureplot(x,y)saveas(gcf,'y.fig');
fig文件作为Matlab中的图形文件,其实原始数据是会存储在figure对象中的,那么通过get函数获取figure对象中相应的数据属性,就可以得到fig图形中的数据。
2、提取figure数据的步骤
提取fig文件数据的方法为:
open("y.fig")
hl = get(gca,'Children'); % 获取坐标轴的子对象:Line对象ha = get(gcf,'Children'); % 获取当前的图形的子对象:Axes坐标轴对象
第三步:获取line对象的xdata、yadata属性;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
x = 0:0.1:10;y = sin(x);y2 = cos(x)figuresubplot(211)plot(x,y)subplot(212)plot(x,y2)saveas(gcf,'yy2.fig');
clearclcclose allopen("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 三维图
%% clearclcclose all
x = 0:0.1:10;y = sin(x);y2 = cos(x)
figureplot3(x,y,y2)saveas(gcf,'xyy2.fig');
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');figureplot3(xdata,ydata,zdata)
|
|