前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以自相关性为例详解matlab GUI纯代码开发

以自相关性为例详解matlab GUI纯代码开发

作者头像
巴山学长
发布2021-04-22 15:11:41
7431
发布2021-04-22 15:11:41
举报
文章被收录于专栏:巴山学长巴山学长

今天,小编将带你做一个GUI小程序,用于“相关性图像自动绘制”,学习全文后,相信你能够入门Matlab GUI纯代码编程。首先,让我们看一下程序长什么样子。

Step1:创建界面

代码语言:javascript
复制
global GUI
% 创建窗口
% figure('属性1',值.'属性2',值,...);
GUI.w1=figure('Name','MyFigure',...
    'Position',[481,196,483,329],...
    'Menubar','none',...
    'Numbertitle','off',...
    'tag','figure1');

% 创建菜单
GUI.m1=uimenu(GUI.w1,'label','打开','callback',@openfile);

% 创建控件
% uicontrol('属性1',值.'属性2',值,...);
GUI.btn1=uicontrol(GUI.w1,'Style','pushbutton','Position',[90,160,60,30],...
    'String','绘制','Fontsize',12,'callback',@drawimage,'tag','btn1');

% 创建坐标轴
% axes('属性1',值.'属性2',值,...);
GUI.Axes1=axes('Box','on','Units','points','Position',[140,30,200,200]);

% 创建callback
function drawimage(~,~)
    x=0:0.1:2*pi;
    plot(x,sin(x),'-r');
end

如上所示,创建窗口、控件的语法类似,参数均为“属性,值”,那么问题来了,我们如何知道窗口、控件的属性呢?方法1:删除掉代码中创建窗口的'Menubar,none'这一行,使菜单栏显示,运行程序,点击属性检查器后,选择相应控件即可,如下图。方法2:命令行输入guide,创建控件查看属性。

窗口、菜单、控件创建好了,接下来需要callback引入功能,如上代码,callback作为控件属性,其后@函数名即可完成绑定。

学习到这里,你可以做出本文介绍的GUI小程序的界面了

Step2:功能-打开文件

代码语言:javascript
复制
% callback-打开图片
function openfile(~,~)
    global GUI
    [Filename,Pathname]=uigetfile({'*.txt';'*.xls';},'选择文件');
    str=[Pathname Filename];
    if (Filename~=0)
        GUI.data=load(str);
        msgbox('读取文件成功');
    else
        return;
    end
end

Step3:功能-导出高清图片

代码语言:javascript
复制
% callback-导出图片
function savefile(~,~)
    global GUI
    h=figure;
    set(h,'Visible','off');
    h1=copyobj(GUI.Axes1,h);
    set(h1,'Units','default','Position','default');
    [fileName,pathName]=uiputfile({'*.jpg','JPEG(*.jpg)';},'save picture','Picture1');
    if fileName==0
        close(h);
        return;
    else
        print(strcat(pathName,fileName),h,'-r2000','-dtiffn');
        msgbox('保存文件成功');
    end
end

学习到这里,你可以为“打开”、“导出”两菜单添加功能了。

Step4:功能-美化图片

代码语言:javascript
复制
% 创建并保存句柄结构(!!!)
handles=guihandles(GUI.w1); 
guidata(GUI.w1,handles); 

% callback-美化图片
function beautiful()  
   global GUI
   FontSize1=get(GUI.edit1,'string');
   FontSize1=str2double(FontSize1);

   S=guidata(gcbo); 
   S.Axes1.FontSize=FontSize1;
   S.Axes1.FontWeight='Bold';
   S.Axes1.Box='on';
   S.Axes1.LineWidth=1.5;
   S.Axes1.XGrid='on';
   S.Axes1.YGrid='on';
   S.Axes1.GridLineStyle='--';
   guidata(gcbo,S);
end

创建句柄结构后,需要为控件添加‘tag’属性以标识控件,否则

guidata(gcbo)将返回[];最后利用guidata(gcbo,S)把值传递回去,该例子体现的是GUI的数据传递。

step5:总结

下面我们将上面的程序汇总起来

代码语言:javascript
复制
clear;clc;
global GUI
% 创建窗口
GUI.w1=figure('Name','MyFigure',...
    'Position',[481,196,483,329],...
    'Menubar','none',...
    'Numbertitle','off',...
    'tag','figure1');

% 创建菜单
GUI.m1=uimenu(GUI.w1,'label','打开','callback',@openfile);
GUI.m2=uimenu(GUI.w1,'label','导出','callback',@savefile);

% 创建控件
GUI.btn1=uicontrol(GUI.w1,'Style','pushbutton','Position',[90,160,60,30],...
    'String','绘制','Fontsize',12,'callback',@drawimage,'tag','btn1');
GUI.text1=uicontrol(GUI.w1,'Style','text','Position',[-20,250,90,30],...
    'String','字号:','FontSize',12,'tag','text1');
GUI.edit1=uicontrol(GUI.w1,'Style','edit','Position',[50,250,90,30],...
    'FontSize',12,'String',12,'tag','edit1','callback',@drawimage);
GUI.Axes1=axes('Box','on','Units','points','Position',[140,30,200,200],'tag','Axes1');

% 创建并保存句柄结构
handles=guihandles(GUI.w1); 
guidata(GUI.w1,handles); 

% callback-打开图片
function openfile(~,~)
    global GUI
    [Filename,Pathname]=uigetfile({'*.txt';'*.xls';},'选择文件');
    str=[Pathname Filename];
    if (Filename~=0)
        GUI.data=load(str);
        msgbox('读取文件成功');
    else
        return;
    end
end

% callback-导出图片
function savefile(~,~)
    global GUI
    h=figure;
    set(h,'Visible','off');
    h1=copyobj(GUI.Axes1,h);
    set(h1,'Units','default','Position','default');
    [fileName,pathName]=uiputfile({'*.jpg','JPEG(*.jpg)';},'save picture','Picture1');
    if fileName==0
        close(h);
        return;
    else
        print(strcat(pathName,fileName),h,'-r2000','-dtiffn');
        msgbox('保存文件成功');
    end
end

% callback-绘制图片
function drawimage(~,~)
    x=0:0.1:2*pi;
    plot(x,sin(x),'-r');
    beautiful;
end

% callback-美化图片
function beautiful()  
   global GUI
   FontSize1=get(GUI.edit1,'string');
   FontSize1=str2double(FontSize1);

   S=guidata(gcbo); 
   S.Axes1.FontSize=FontSize1;
   S.Axes1.FontWeight='Bold';
   S.Axes1.Box='on';
   S.Axes1.LineWidth=1.5;
   S.Axes1.XGrid='on';
   S.Axes1.YGrid='on';
   S.Axes1.GridLineStyle='--';
   guidata(gcbo,S);
end

step6:相关性图像绘制核心代码

代码语言:javascript
复制
% callback-绘制图片
function draw_xg(varargin)
     global GUI
     cla(GUI.Axes1)
;
     %字号
     FontSize1=get(GUI.edit1,'string');
     FontSize1=str2double(FontSize1);
     %绘制散点
     x1=GUI.menu1.UserData(:,1);
     y1=GUI.menu1.UserData(:,2);
     plot(x1,y1,'.k');
     %计算拟合曲线
     axisx=get(gca,'Xlim'); 
     t=polyfit(x1,y1,1);
     k=t(1);
     b=t(2);
     x2=axisx(1):axisx(2);
     y2=k*x2+b;
     %绘制曲线
     hold on
     plot(x2,y2,'-r','LineWidth',2);
     %计算R
     t=corrcoef(x1,y1);
     R=t(1,2);
     %计算坐标范围
     axisx=get(gca,'Xlim'); 
     axisy=get(gca,'Ylim');
     %标注R
     text(axisx(2),axisy(2),['R=',num2str(R)],'HorizontalAlignment','right',...
         'VerticalAlignment','top','FontSize',FontSize1,'FontWeight','bold');
     hold off
     axis([axisx(1) axisx(2) axisy(1) axisy(2)])
     %美化
     beautiful
end

由于完整代码较长,这里就不贴了,回复关键字“相关性”即可得到网盘链接。

参考资料:

[1] https://www.ilovematlab.cn/thread-20398-1-1.html

[2] https://www.ilovematlab.cn/thread-30649-1-1.html

[3] https://www.ilovematlab.cn/thread-120650-1-1.html

[4] https://www.ilovematlab.cn/thread-63062-1-1.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档