Matlab自编myfigure函数-快速输出figure图形曲线数据(原创)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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'}));