本文章主要讲解MATLAB App designer中坐标区的使用方法及其注意事项
- 坐标区的组成
- 坐标区的显示
- 坐标区的交互
1.坐标区的组成
MATLAB app 中的坐标区是显示数据、图像的主要组件,功能也很丰富。
可见的区域由标题、XY轴标签、XY轴坐标和显示区域组成。
2.坐标区的显示
a.标题、坐标轴
在figure中能显示的plot、text、rectangle等函数都可以对应在坐标区中显示。
标题、标签可以直接在界面中双击修改,或者在右边的“标签”一栏中修改。
若要在代码中实现,则可以以下代码进行修改:
app.UIAxes.Title.String='111';
app.UIAxes.XLabel.String='222';
app.UIAxes.YLabel.String='333';
坐标轴一般是根据图像大小和设置的边界范围自动调整的,也可以自己设置。
b.图像的显示
以下讲解plot和image的在坐标区的使用
使用plot在坐标区中显示和正常使用几乎没什么区别,只需要在最前面加上显示的坐标区就行了。
此处坐标区名字为app.UIAxes,则使用如下代码就可以实现在坐标区中的显示,其余部分完全一致。
plot(app.UIAxes,X,Y);
Image使用时需要注意,图像数据是存储在矩阵中的,每个元素的坐标为行列索引,而不是XY,并且其原点位于左上角,以下示例代码中,矩阵名称为“grid_map”,矩阵的数据为1-4,使用颜色映射显示。
cmap = [1 1 1; ...
0 1 1; ...
1 0.5 0.6; ...
0 0 0;];
cla(app.UIAxes);%
colormap(app.UIAxes,cmap);%设置坐标区的颜色映射
[rows, cols] = size(grid_map);%获得行列大小
image(app.UIAxes,1.5,1.5,grid_map);%图像显示
set(app.UIAxes,'xtick', 1:cols+1, 'ytick', 1:rows+1);%设置坐标轴刻度
xlim(app.UIAxes,[1 cols+1])%设置坐标轴长度
ylim(app.UIAxes,[1 rows+1])
c.多个图像的绘制
坐标区可以设置四种图像的添加模式,这里主要讲add和replace,剩下两个不会。
add是将新的图像添加到原有的图像上,其坐标原点、轴与上一个图像相同(一般默认在左下角)
replace是将上一个图像替代,坐标原点会随函数的使用而改变(如image的坐标原点位于左上角,plot的位于右下角)
d.关于绘制图像时会生成窗口的问题
作者在使用函数plot图像时,会出现坐标区图像正常,但会额外出现一个空白窗口的现象,以下是该问题产生的原因以及解决方法。
这段代码运行时就会产生一个空白窗口,原因可能是在plot在检测UIAxes时,一开始没有识别出app.UIAxes这个坐标区(app.UIAxes太长了,未加载完),所以新建了一个窗口,但是后面plot时检测出来了,因此图像会正确显示在坐标区,新建的窗口为空白。
解决方法:
1.将输入的变量从app改为app.UIAxes
2.预加载UIAxes
在使用plot前先将坐标区加载一下
3.简单粗暴法
直接在plot后加一个close all,关掉生成的窗口
3.坐标区的交互
鼠标的坐标获取
在一些场景下,如做个五子棋小游戏,需要用到点击,并且在鼠标点击的位置下棋。此时就需要获得鼠标的坐标。
这里我们用UIFigure中,窗口回调中的“WindowButtonDownFcn”(鼠标点击时的回调)来进行鼠标点击操作的编辑。
mouthPosition=app.UIAxes.CurrentPoint;
app.mouth(1)=mouthPosition(1,1);
app.mouth(2)=mouthPosition(1,2);
利用app.UIAxes.CurrentPoint获得鼠标在坐标区的位置,CurrentPoint的返回值获得的是一个2*3的矩阵,一行中的数据对应了鼠标指针的XYZ坐标,(1,1)为X坐标,(1,2)为Y坐标。