Matlab画的plot导入到excel

 这就是一篇matlab软件自学之路的记录,能帮助到大家非常荣幸!!!主要还是感谢开发了myfigure函数的博主啦!!!

目录

前言

 改进代码

演示结果


前言

我本来是做一个simulink仿真,输入信号是一个论文里面得出的结论(一条二次函数抛物线),我想用它Library里面Signal Builder来拟合曲线,无奈它的import输入方式是通过外部导入excel表格里面各个点,我不可能一个个输入100个数据点,所以萌生了先用matlab中plot命令画出图像,再由图像导出excel数据点。

困难的地方就在plot图像转化为excel数据点,幸好我找到了这一篇文章,里面博主搭建了一个myfigure函数,帮助我完成了这一步。非常感谢这位博主的无私分享。

这篇文章:https://blog.csdn.net/ywsydwsbn/article/details/125323700

 改进代码

copy了此博主的代码却出现了报错,主要是有的function没有用end来结尾。所以我去查了一下functionif语句的用法,重新检查更新了一下code,代码如下:

%% 我的曲线方程
x=linspace(0,2,100);
y=-0.056*x.^2+0.521*x+0.048;
figure,plot(x,y,'r')
xlabel('时间');
ylabel('速度');
title('抛物线速度曲线');
axis([0,2,0,1]);
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
%% 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
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);
 end
 if a==0
 end
h=helpdlg('保存成功');
pause(0.5)
close(h)
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');
 end
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)
end

function Read_data(~,~)
Xdata=cell2mat(get(gco,{'Xdata'}));
Ydata=cell2mat(get(gco,{'Ydata'}));
Xdata=Xdata';
Ydata=Ydata';
data=[Xdata,Ydata];
f=figure('NumberTitle','off','Menubar','none');
uitable('Parent',f,'Data',data);
end

function X_lim(~,~)
prompt={'起始值','终止值'};
    dlg_title='请输入参数';
    num_lines=1;
    def = {'0','10'};
    siz=inputdlg(prompt,dlg_title,num_lines,def);
    if ~isempty(siz)
    siz1=str2double(siz{1});
    siz2=str2double(siz{2});
    xlim([siz1 siz2])
    end
end

function Y_lim(~,~)
prompt={'起始值','终止值'};
    dlg_title='请输入参数';
    num_lines=1;
    def = {'0','10'};
    siz=inputdlg(prompt,dlg_title,num_lines,def);
    if ~isempty(siz)
    siz1=str2double(siz{1});
    siz2=str2double(siz{2});
    ylim([siz1 siz2])
    end
end

----------这是一条分割线----------


演示结果

运行之后的界面是这样的:

 可以看出多了“数据输出”、“坐标范围”。我们所要的数据点就可以通过点击数据输出,创建一个excel表格,导出为xls格式。


Signal Builder导入excel数据后如下图

 完美!!!

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值