【自学用】Matlab画的plot导入到excel

您所在的位置:网站首页 非常简单的眩晕画 【自学用】Matlab画的plot导入到excel

【自学用】Matlab画的plot导入到excel

2024-02-22 08:04| 来源: 网络整理| 查看: 265

 这就是一篇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来结尾。所以我去查了一下function和if语句的用法,重新检查更新了一下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数据后如下图:

 完美!!!



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3