从fig文件中读取数据

原文地址:http://blog.sina.com.cn/s/blog_4015d6ce0100ujwh.html

MATLAB:从fig文件中读取数据作者:GameGaming

1 如果你的fig文件中的图像每个像素都有数据,可以通过以下方式获得图像每个点的值,输出data是矩阵,大小是图像像素的行列数

open('figname.fig');

h=get(gca,'Children');

data=get(h,'Cdata');

 

2 如果你的fig文件中图像是由单条曲线绘制而成,比如说plot命令生成的,通过以下方式输出横坐标,纵坐标的取值

open('figname.fig');

subplot(2,1,2);%当一个.fig中有多个图形时,加这句指明读取的图片 这句含义是:在2X1的fig中读取第二个图的数据

h_line=get(gca,'Children');%get line handles

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有四个数据的第四个数据错误


转载于:https://my.oschina.net/u/1024767/blog/637350

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值