Matlab GUI入门-直方分布图界面制作

前言

制作gui界面,根据输入两个整数,画直方图。直方图的直方数和随机数的个数由界面输入;随机数的类型请用radiobutton控制,至少给出三种随机数组合。

入门系列一从界面到功能具体实现详细下戳
Matlab GUI入门-文件显示界面制作

实操

1.step 1 构建图形的初始页面,颜色、字体大小可以双击 打开属性页面设置 自己选择
在这里插入图片描述
2.功能部分。
对功能进行分析。
(1)输入参数后,点击确定之后,直方分布图绘制在画布上
(2)输入参数后,点击取消后重置参数。

大致点击“确定” 按钮,右键进入回调(查看回调-callback),搭建初步实现框架,再去补其他具体模块实现。
还是同上面思路一样,通过捕获异常 输出 参数无效值的设置

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%设置全局变量来记录是否显示过绘图
global draw
draw=0
try
    %获得直方数
    num=get(handles.edit1,'string')
    num=str2num(num)
    %获得随机数个数
    rand_num=get(handles.edit2,'string')
    rand_num=str2num(rand_num)
    
    %这里的设置是因为一开始运行的时候,单选默认是“均匀分布”,至于你的“均匀分布”的Tag是什么要具体修改
    try
        a=handles.str_button %如果点击了按钮组的选项,这里不会报错 因此可以直接获得
    catch exception
    	%报错了是因为没有点击按钮选项,按照初始的默认选择。报错的原因要具体看我下面按钮组的设置模块部分是怎么写的。因为,我没有给按钮们设置value
        a='radiobutton1'%查看对应的tag ,这里进行修改
    end

    %判断单选按钮,对应随机数产生方法 
    switch a
        case 'radiobutton1'%均匀分布(设计框架时,只需在下面写do somthing)
            %判断是否输入生成范围
            % b=size(get(handles.edit3,'string'))
            % assignin('base','size',b) %方便在工作区监控变量的指令)
            size1=size(get(handles.edit3,'string'))
            size2=size(get(handles.edit4,'string'))
            if (size1(2)>0) & (size(2)>0) %这是我判断不会输出空字符串不会报错的方法了。如果直接==''这样,对于有字符输入,会报错:维度不一致
                min=get(handles.edit3,'string')
                max=get(handles.edit4,'string')
                min=str2num(min)
                max=str2num(max)
                if min==max %输入的范围不能相等
                    throw(exception) %扔出一个异常,被首级的try..catch.. 捕获,执行首级的命令。
                    %要看清try...catch... 的分级
                end
            else
            	%默认设置
                min=0
                max=1
            end
            assignin('base','max',max)
            R=min+(max-min).*rand(rand_num,1)%[20-100] %均匀分布
        case 'radiobutton2'
        %下面分析和上面雷同,正态分布
            size1=size(get(handles.edit7,'string'))
            size2=size(get(handles.edit8,'string'))
            if (size1(2)>0) & (size(2)>0)
                mean=get(handles.edit7,'string')
                standard_deviation=get(handles.edit8,'string')
                mean=str2num(mean)
                standard_deviation=str2num(standard_deviation)
            else
                mean=0
                standard_deviation=1
            end    
            assignin('base','mean',mean)
            assignin('base','standard',standard_deviation)
            %from a normal distribution with mean 1 and standard deviation 2.
            %r = 1 + 2.*randn(100,1);
            R=mean+standard_deviation.*randn(rand_num,1);%正态分布,均值为0,方差为1
        case 'radiobutton3'  
            %do something 泊松分布
            lam=70
            R=poissrnd(lam,rand_num,1);
        case 'radiobutton4'
            %do something 几何分布
            size1=size(get(handles.edit6,'string'))
            if size1(2)>0
                p=get(handles.edit6,'string')
                p_=str2num(p)
%                 assignin('base','p_',p_)
                if p_>100|p_<1
    %                     ME=MException('myfun:valid value','value %s is valid',p)
    %                     throw(ME) %这里是自定义异常,并抛出,后来没有用到
                    throw(exception)
                else
                    p_=p_/100
                    R=geornd(p_,rand_num,1)
                end
            else
                throw(exception)
            end
        case 'radiobutton5'
            %do something 二项分布
            size1=size(get(handles.edit6,'string'))
            if size1(2)>0
                p=get(handles.edit6,'string')
                p_=str2num(p)
                assignin('base','p_',p_)
                if p_>100|p_<1
                    throw(exception)
                else
                    p_=p_/100
                    R=binornd(50,p_,rand_num,1);
                end
            else
                throw(exception)
            end
    end
    %绘制直方分布图
    axes(handles.axes1)
    hist(R,num)
    draw=draw+1
catch exception
    warndlg('输入了无效值,请重新输入','warning string')
end

小总结:

  1. 各种分布的使用方法
    用matlab生成各种分布的随机数并做直方图
  2. 异常处理
    引发异常
    捕获异常

(2)多个单选按钮的设置
两个思路:
1.通过设置按钮组的回调函数
2.通过设置所有的按钮 的 回调函数
下面的例子讲的非常详细:
MATLAB中的单选按钮和按钮组
下面我是通过第一个思路设置

% --- Executes when selected object is changed in uibuttongroup2.
function uibuttongroup2_SelectionChangedFcn(hObject, eventdata, handles)
% hObject    handle to the selected object in uibuttongroup2 
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%方法二
%这里代码解释了上面为什么要异常处理,如果是默认选择而不点击,根本就不会进入这个响应函数,相应的handles 里面 就没有 str_button 这个属性
handles.str_button=get(hObject,'tag')

%保存数据
guidata(hObject,handles)

(3)取消置数

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.edit1,'string','') %设置空值的方法
set(handles.edit2,'string','')
set(handles.edit3,'string','')
set(handles.edit4,'string','')
set(handles.edit7,'string','')
set(handles.edit8,'string','')
set(handles.edit6,'string','')
set(handles.radiobutton1,'value',1)%使能当前

最终效果(分布图展示 和 数据异常报错)
在这里插入图片描述
在这里插入图片描述
尽管代码可能写的有些累赘,如果有更好的方法,更简洁的代码实现可以讨论区交流~

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原创免费运动检测及测速GUI-src.zip 运动检测及测速GUIdemo详解涉及内容: 1.GUI主--子界面设计:主界面GUI启动子界面GUI    更改程序图标icon 2.GUI转化为可执行程度:用matlab自带编译工具deploytool对程序进行编译   隐藏exe程序运行时的dos黑窗   用deploytool对编译程序进行打包 3.基于图像处理的运动目标检测及测速:道路背景重建 运动车辆检测 运动跟踪及测速 内容详细说明:上篇:GUI制作 1.有两个GUI程序motion_detection.m和MotionDection2010.m,要实现的功能是打开motion_detection.m登录界面,点击其中的enter进入MotionDection2010.m界面进行运动目标检测及测速操作。 1.JPG 可以看到,在子GUI中的图标icon改为了QQ图标。 2.对主GUI进行mcc编译,mcc –m motion_detection.m。不需要编译其他文件。编译完成后会出现: 3.JPG 3.在command中输入deploytool,注意此处的命令不同于以往的comtool. 4.JPG 在deploytool中打开当前文件目录中的motion_detection.prj工程文件,并添加其它所需文件,如图编译完成后可随意修改(不知道什么原因,我自己修改名字之后,编译后不能运行) 7.JPG 将两个GUI所需要的文件拖入下图的界面,Main function是主界面的M文件,其他用的的文件均放到Other files中,如果有c/c 就放入相应位置。 8.JPG 点击 9.JPG 中的 10.JPG 按钮启动编译。进入编译界面。编译完成后,出现: 11.JPG 4.也可以直接省略mcc –m这一步直接用deploytoo进行编译。编译完成后生成一个新的文件夹 12.JPG ,不要修改它的名字,编译完成后可随意修改(不知道什么原因,我自己修改名字之后,编译后不能运行)。如何程序比较简单应该不会有问题。本程序当前直接用deploytool编译,结果不能运行。并且主GUI界面的背景颜色显示不正常。新建一个工程,注意不要改名字,默认为Untitled1.prj,如果改名字,运行生成的exe文件时会一闪而过(也可能是其他原因,但是不改名字就没有出现这个问题)加入编译的文件,1分钟左右,生成一个新的文件夹 。注:此过程是之前做的,所以截图是Untitled1,后面的截图是今天做的,所以是Untitled2,过程是一样的,特此说明。 13.JPG 这里是Untitled2文件夹。 14.JPG 在当前文件目录中会生成一个新的Untitled2的文件夹。里面就是编译生成的文件 15.JPG 16.JPG EXE文件就可以直接运行了。5.去掉DOS黑框。论坛里讲了三种方法,首先感谢他们的贡献。个人觉得没有必要去掉黑框,因为看不到程序运行情况,不便于调试。另外,cd;edit compopts.bat的方法,经过尝试在本程序中运行主界面后后续程序不能运行,可能是程序本身的问题。我改用为suppress的方法。将suppress.exet 和suppress.ini按照它的要求修改后。对我们生成的GUI,即Untitled2.exe程序新建快捷方式,然后可以更换其图标icon,方法是点右键—属性—更改图标 17.JPG 18.JPG 6.做完exe后,可以对其进行打包成自解压的安装文件。论坛里的朋友介绍了几种用第三方安装程序制作软件,方法都非常好,但是好像不能自解压matlab Runtime MCRInstaller.exe,这里再介
原创免费运动检测及测速GUI-GUI生成.zip 运动检测及测速GUIdemo详解涉及内容: 1.GUI主--子界面设计:主界面GUI启动子界面GUI    更改程序图标icon 2.GUI转化为可执行程度:用matlab自带编译工具deploytool对程序进行编译   隐藏exe程序运行时的dos黑窗   用deploytool对编译程序进行打包 3.基于图像处理的运动目标检测及测速:道路背景重建 运动车辆检测 运动跟踪及测速 内容详细说明:上篇:GUI制作 1.有两个GUI程序motion_detection.m和MotionDection2010.m,要实现的功能是打开motion_detection.m登录界面,点击其中的enter进入MotionDection2010.m界面进行运动目标检测及测速操作。 1.JPG 可以看到,在子GUI中的图标icon改为了QQ图标。 2.对主GUI进行mcc编译,mcc –m motion_detection.m。不需要编译其他文件。编译完成后会出现: 3.JPG 3.在command中输入deploytool,注意此处的命令不同于以往的comtool. 4.JPG 在deploytool中打开当前文件目录中的motion_detection.prj工程文件,并添加其它所需文件,如图编译完成后可随意修改(不知道什么原因,我自己修改名字之后,编译后不能运行) 7.JPG 将两个GUI所需要的文件拖入下图的界面,Main function是主界面的M文件,其他用的的文件均放到Other files中,如果有c/c 就放入相应位置。 8.JPG 点击 9.JPG 中的 10.JPG 按钮启动编译。进入编译界面。编译完成后,出现: 11.JPG 4.也可以直接省略mcc –m这一步直接用deploytoo进行编译。编译完成后生成一个新的文件夹 12.JPG ,不要修改它的名字,编译完成后可随意修改(不知道什么原因,我自己修改名字之后,编译后不能运行)。如何程序比较简单应该不会有问题。本程序当前直接用deploytool编译,结果不能运行。并且主GUI界面的背景颜色显示不正常。新建一个工程,注意不要改名字,默认为Untitled1.prj,如果改名字,运行生成的exe文件时会一闪而过(也可能是其他原因,但是不改名字就没有出现这个问题)加入编译的文件,1分钟左右,生成一个新的文件夹 。注:此过程是之前做的,所以截图是Untitled1,后面的截图是今天做的,所以是Untitled2,过程是一样的,特此说明。 13.JPG 这里是Untitled2文件夹。 14.JPG 在当前文件目录中会生成一个新的Untitled2的文件夹。里面就是编译生成的文件 15.JPG 16.JPG EXE文件就可以直接运行了。5.去掉DOS黑框。论坛里讲了三种方法,首先感谢他们的贡献。个人觉得没有必要去掉黑框,因为看不到程序运行情况,不便于调试。另外,cd;edit compopts.bat的方法,经过尝试在本程序中运行主界面后后续程序不能运行,可能是程序本身的问题。我改用为suppress的方法。将suppress.exet 和suppress.ini按照它的要求修改后。对我们生成的GUI,即Untitled2.exe程序新建快捷方式,然后可以更换其图标icon,方法是点右键—属性—更改图标 17.JPG 18.JPG 6.做完exe后,可以对其进行打包成自解压的安装文件。论坛里的朋友介绍了几种用第三方安装程序制作软件,方法都非常好,但是好像不能自解压matlab Runtime MCRInstaller.exe,这里再介绍一种新方法,可以在deploytool中的 19.JPG package按钮对生成的程序进行打包,生成一个****pkg.exe的文件,使用时双击安装即可,里面包含了matlab MCRInstaller.exe,不必重新安装(在无matlab的电脑上)。 20.JPG 打包完成后,后新增一个motion_detection_pkg.exe的打包安装文件,将这个文件拷贝到没有安装matlab的电脑上直接安装就能运行。不需要另外再安装matlab runtime. 21.JPG 下篇:运动检测及测速 1.输入起始图像序列,并可以启动Video模式,程序绘制每一帧图像的直方图及其正态分布及核密度估计法拟合图。 22.JPG 2.重建背景 24.JPG 3.输入查看帧,调节相应的参数,观察图像变化。 25.JPG 4.绘制运动轨迹并计算速度。程序没有对图像进行标定,这里计算的速度没有实际价值。 26.JPG 5.Undo可以清空当作轨迹,重新进行操作。 27.JPG

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值