原文地址:http://blog.sina.com.cn/s/blog_4015d6ce0100ujwh.htmlhtml
MATLAB:从fig文件中读取数据做者:GameGaming数组
1 若是你的fig文件中的图像每一个像素都有数据,能够经过如下方式得到图像每一个点的值,输出data是矩阵,大小是图像像素的行列数spa
open('figname.fig');.net
h=get(gca,'Children');htm
data=get(h,'Cdata');对象
2 若是你的fig文件中图像是由单条曲线绘制而成,好比说plot命令生成的,经过如下方式输出横坐标,纵坐标的取值blog
open('figname.fig');图片
subplot(2,1,2);%当一个.fig中有多个图形时,加这句指明读取的图片 这句含义是:在2X1的fig中读取第二个图的数据get
h_line=get(gca,'Children');%get line handlesgc
xdata=get(h_line,'Xdata');
ydata=get(h_line,'Ydata');
3 若是你的fig文件中图像是由三维单条曲线绘制而成,好比说plot3命令生成的,经过如下方式输出x,y,z 坐标的取值
open('figname.fig');
h_line=get(gca,'Children');%get line handles
xdata=get(h_line,'Xdata');
ydata=get(h_line,'Ydata');
zdata=get(h_line,'Zdata');
4 若是你的fig文件中图像是由多条曲线绘制而成,好比说plot命令生成的,经过如下方式输出横坐标,纵坐标的取值
open('figname.fig');
lh = findall(gca, 'type', 'line');% 若是图中有多条曲线,lh为一个数组
xc = get(lh, 'xdata'); % 取出x轴数据,xc是一个元胞数组
yc = get(lh, 'ydata'); % 取出y轴数据,yc是一个元胞数组
%若是想取得第2条曲线的x,y坐标
x2=xc{2};
y2=yc{2};
如下来自:http://blog.csdn.net/myj0513/article/details/7403716
5 figure上只有一个axis:
(1)首先调用h = findobj(gca,'Type','line')命令取得曲线的句柄;
(2)而后调用xdata=get(h,'XData')和ydata=get(h,'YData')取得曲线的数据。
6 figure上有几个axis,即用subplot等画得图像:(小注:这个方法我试过了,很差用。可能有未知错误)
clc;clear
x=1:10;
y1=x.^2;
y2=x.^3;
subplot(2,1,1)
plot(x,y1)
subplot(2,1,2)
plot(x,y2)
figure_info=findall(gcf,'type','line');
xc1=get(figure_info(1,:),'xdata')
xc2=get(figure_info(2,:),'xdata')
yc1=get(figure_info(1,:),'ydata')
yc2=get(figure_info(2,:),'ydata')
这样就能够将全部子图中的曲线信息都找出来。
对比了findall help文件,其中findall中的handle_list能够是一下几种:
gcf 返回当前Figure对象的句柄值
gca返回当前axes对象的句柄值
gco返回当前鼠标单击的句柄值,该对象能够是除root对象外的任意图形对象,而且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中。
7 figure上是个二维图像
h=findobj(gcf,'type','image');
img=get(h,'CData');
8 figure上是曲面图像
figure_info=findall(gcf,'type','surf');
xx=get(figure_info,'xdata');
yy=get(figure_info,'ydata');
z=get(figure_info,'zdata');
最终本身使用的代码
注:该代码对应的matlab版本需与fig对应版本一致
clear,clc open('1.fig'); subplot(2,1,1);subplot(2,1,2); lh = findall(gca, 'type', 'line');% 若是图中有多条曲线,lh为一个数组 xc = get(lh, 'xdata'); % 取出x轴数据,xc是一个元胞数组 yc = get(lh, 'ydata'); % 取出y轴数据,yc是一个元胞数组 a1=[xc{1,1}]'; a2=[xc{2,1}]'; a3=[xc{3,1}]'; a4=[xc{4,1}]'; a5=[xc{5,1}]'; a6=[xc{6,1}]'; a7=[xc{7,1}]'; a8=[xc{8,1}]'; %a=[a1 a2 a3 a4 a5 a6 a7 a8]; a=[a1 a2 a3 a4]; b1=[yc{1,1}]'; b2=[yc{2,1}]'; b3=[yc{3,1}]'; b4=[yc{4,1}]'; b5=[yc{5,1}]'; b6=[yc{6,1}]'; b7=[yc{7,1}]'; b8=[yc{8,1}]'; %b=[b1 b2 b3 b4 b5 b6 b7 b8];%2 3 4有四个数据的第四个数据错误 b=[b1 b2 b3 b4];%2 3 4有四个数据的第四个数据错误