【MATLAB】帮助 读者 解决appdesigner中 绘图显示消隐切换 的问题。

写作时间:2020-07-08
目录:
1.读者的困惑
2.帮其解决
3.总结

正文:
1.读者的困惑
精简一下:
他想实现的是:
点击button1,绘制bode图 在UIAxes1和UIAxes2绘图区,显示bode图,隐藏img
点击button2,绘制图像img 在UIAxes3绘图区,显示img,隐藏bode图。

他遇到的问题是:
显示与消隐不成功,他的方法是:

%-----------------不成功的方法--------代码-------
%button 1回调中如下控制:
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
[mag,phase,w]=bode(H);
semilogx( app.UIAxes1,w,20*log(mag(:)) );
grid (app.UIAxes1,"on");
semilogx( app.UIAxes2,w,phase(:) );
grid (app.UIAxes2,"on");
app.UIAxes1.Visible="on";
app.UIAxes2.Visible="on";
app.UIAxes3.Visible="off";

%button 2回调中如下控制:
A=imread("G:\Fig0809(a).tif") ;
imshow(A,'Parent',app.UIAxes3);            
app.UIAxes1.Visible="off";
app.UIAxes2.Visible="off";
app.UIAxes3.Visible="on";

理论操作上,感觉这个方法可以,但是实际上不行。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.帮其解决
我的方法:

先把UIAxes1和UIAxes2放在panel 1中,把UIAxes3放在panel 2中,
然后控制Panel 的Visible 与否,而不是控制UIAxes的Visible 与否!!!!!

%-----------------成功的方法--------代码-------
%button 1回调中如下控制:
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
[mag,phase,w]=bode(H);
semilogx( app.UIAxes1,w,20*log(mag(:)) );
grid (app.UIAxes1,"on");
semilogx( app.UIAxes2,w,phase(:) );
grid (app.UIAxes2,"on");
app.Panel1.Visible="on";
app.Panel2.Visible="off";

%button 2回调中如下控制:
A=imread("G:\Fig0809(a).tif") ;
imshow(A,'Parent',app.UIAxes3);            
app.Panel1.Visible="off";
app.Panel2.Visible="on";

问题解决,如下:

在这里插入图片描述
3.总结

为什么控制uiaxes不能够成功呢?是因为uiaxes在这里只控制了绘图的坐标,对于绘图区的内容控制不了,况且 axes 的大小不固定。
所以,我建立把uiaxes放在panel 里面,控制panel的visible是最好的方法。


THE END~
如有matlab 上的问题,欢迎订阅,我也会回答您的个人使用困惑。

猜你喜欢

转载自blog.csdn.net/hahahahhahha/article/details/107204316