Matlab自编myfigure函数-快速输出figure图形曲线数据(原创)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab自编myfigure函数,快速输出figure图形曲线数据

L X

我们知道Matlab作图功能非常强大,但遗憾的是,Matlab在图形处理方面也有两个很大的不足,其一,Matlab保存的Figure图形,不能像origin图形一样,携带数据并可以在word/ppt/excel里面重新编辑;其二,Matlab没有提供快捷方式使我们能快速地从Figure图形中获取某特定曲线的数据,复制或保存,尽管在一般情况下,我们在WorkSpace中有变量,但是也显得很不方便。对于第一个不足,由于Matlab的固有属性,我们无法解决,第二个不足,我们可以自编函数解决。以下,本人新编了一个Figure函数,此函数可对已建立的Figure图形,添加两项一级菜单“输出数据”和“坐标范围”并在一级菜单下各有几项二级菜单,其功能为,1. 对Figure图形中的数据进行输出和保存输出的数据类型可以为xls、txt, 或者将数据重新返回到工作空间;2. 无须打开figure属性,即可快速对figure图形的坐标范围进行设置。

使用方法:将后面蓝色代码全部复制到m文件,并保存为“myfigure”,至于当前路径下。倾情奉献,如果觉得有参考或使用价值,请下载和评分哦~

示例:

x=linspace(0,2*pi,100);

y1=sin(x);y2=cos(x);

figure,plot(x,y1,'r.-',x,y2,'b*')

xlabel('x'),ylabel('y')

myfigure %运行本段代码,将得到图1

图1 运行myfigure对已建的Figure添加功能菜单,见图中绿色椭圆部分

1 坐标范围设置,如图2

图2 通过单击“坐标范围”菜单下的坐标设置对坐标范围快速设置

2 数据输出(至excel或txt或workspace),如图3

输出的数据格式,为若干列,一条曲线占两列,分别为x,y,多条则为x,y,x,y。

图3 单击“数据输出”下的输出至excel进行数据输出,

3 查看数据。注意,若Figure中有多条曲线,且数据长度不一样,则不能一次性输出数据,而是应该,先单击所需曲线,然后,在“数据输出”菜单下单击“查看数据”,得到数据表,如图4,用ctrl+c复制数据至excel中,从而完成输出。

图4 选择曲线,并单击“数据输出”下的查看数据,可得到数据表格,然后复制至excel 以下为myfigure代码。

function myfigure

%L X, 2014.01

f=gcf;

h=findobj(f,'Label','数据输出');

if isempty(h)

hm1=uimenu('Parent',f,'Label','数据输出');

uimenu(hm1,'Label','查看数据',...

'callback',@Read_data);

uimenu(hm1,'Label','输出至txt',...

'callback',@Save_Strain);

uimenu(hm1,'Label','输出至excel',...

'callback',@Opexcel);

uimenu(hm1,'Label','输出至WP',...

'callback',@OpWP);

hm2=uimenu('Parent',f,'Label','坐标范围');

uimenu(hm2,'Label','X坐标',...

'callback',@X_lim);

uimenu(hm2,'Label','Y坐标',...

'callback',@Y_lim);

end

function Save_Strain(~,~)

h_Line=get(gca,'Children');

Xdata=cell2mat(get(h_Line,{'Xdata'}));

Ydata=cell2mat(get(h_Line,{'Ydata'}));

Ydata=flipud(Ydata);

Data=[Xdata;Ydata];

L=size(Data,1);

formt=repmat('%f ',[1,L]);

%assignin('base','Data',Data') [filename,pathname]=uiputfile('*.txt');

if ~isequal(filename,0)

fid=fopen([pathname,filename],'w'); fprintf(fid,[formt,'\r\n'],Data);

a=fclose(fid);

if a==0

h=helpdlg('保存成功');

pause(0.5)

close(h)

end

end

function Opexcel(~,~)

h_Line=get(gca,'Children');

Xdata=cell2mat(get(h_Line,{'Xdata'})); Ydata=cell2mat(get(h_Line,{'Ydata'})); Ydata=flipud(Ydata);

Data=[Xdata;Ydata];

[filename,pathname]=uiputfile('*.xls');

if ~isequal(filename,0)

xlswrite([pathname,filename],Data')

h=helpdlg('保存成功');

pause(0.5)

close(h)

end

function OpWP(~,~)

h_Line=get(gca,'Children');

Xdata=cell2mat(get(h_Line,{'Xdata'})); Ydata=cell2mat(get(h_Line,{'Ydata'})); Ydata=flipud(Ydata);

Data=[Xdata;Ydata];

assignin('base','Data',Data')

h=helpdlg('已输出至Matlab工作空间!'); pause(0.5)

close(h)

function Read_data(~,~)

Xdata=cell2mat(get(gco,{'Xdata'}));

相关文档
最新文档