原文链接: http://www.ilovematlab.cn/thread-55768-1-1.html
声明:本文完全转自Matlab论坛liuhuanjinliu的帖子。
本总结意在解决如下问题:利用定时器回调函数或串口回调函数在GUI指定的axes上绘图时,曲线或图片总是不显示在指定的坐标轴上,总是会弹出新的窗口显示。
利用guide来创建GUI程序时,可能大家对figure的HandleVisibility属性以及axes的NextPlot属性关注的不多。figure的HandleVisibility属性有三个属性值:on\off\callback。前两个的含义顾名思义,其作用可以看帮助文件,在此不详述。最后一个callback属性值,它是确保该figure的句柄(handle)对figure内的控件的回调函数以及回调函数内定义的函数来说是‘可见’的,而对于其它例如通过命令行来访问的用户来说是‘不可见’的,这样可以确保该figure不被无意中删除或修改其中的内容。
可见,figure的HandleVisibility属性的callback属性值带有明显的保护figure的作用,是有益的。但是这种保护机制对于使用定时器或串口自定义回调函数来绘制曲线的用户来说,就会带来麻烦。
因为定时器或串口对象不是figure所包含的对象,所以其回调函数在调用figure内的axes来绘图时,就会发现找不到该figure的handle,以为该figure对象不存在,于是就会新建figure窗口,在其中创建axes来显示的曲线。
根据以上分析,如果用户在利用定时器或串口回调函数绘制图形时出现上述问题,解决办法如下:
1、fugure的‘HandleVisibily’属性值默认为‘callback’,把它改为‘on’;
2、axes的‘NextPlot’的属性值默认为‘replace’,改为‘add’。
3、在绘图语句的前面使用语句axes(handles.axes1);%'axes1'为axes的'tag'
先前有会员在编程时遇到同样的问题,根据以上方法,问题顺利解决。
希望有遇到类似问题的会员可以参考该帖子。:-)
以上是个人经验,如有不足,欢迎指正修改,多谢。