【发布时间】:2015-02-11 16:00:06
【问题描述】:
假设我有一个矩阵hey 15x15。我想将矩阵的值绘制为二维图以便更好地可视化。但 Matlab 的绘图约定原点位于左下角,正 x 沿左侧,正 y 沿从原点向上的方向。
但我想让我的绘图使得原点位于左上角,+ve x 位于左侧,+ve y 位于下方。
所以我只是使用了一个小技巧。
figure
axis([0 15 -15 0]);
daspect([1,1,1])
hold on
rectangle('Position',[3,-6,2,3],...
'EdgeColor','black',...
'LineWidth',2,...
'FaceColor','cyan')
for i=1:nrows
for j=1:ncolumns
if char(hey(i,j))=='^'
text(j,-i,'^');
elseif char(hey(i,j))=='>'
text(j,-i,'>');
elseif char(hey(i,j))=='v'
text(j,-i,'v');
elseif char(hey(i,j))=='<'
text(j,-i,'<');
end
if obstacle(i,j)==1
text(j,-i,'X');
end
end
end
text(goalY,-goalX,'T');
我进行了转换(x,y)-->(y,-x)。但缺点是轴随后沿 y 编号为 -1 到 -15。但是,如果读者在上面关注,我只想绘制矩阵值,并且在矩阵中,对于我的情况,y 从 1 向下运行 +ve 到 15。
所以我希望绘图显示 +1 到 +15 沿 y 原点在左上角,x 按原样毕业,但 +1 到 +15 的值写在绘图顶部而不是下面。
如何做到这一点?在极端情况下,我也愿意将矩阵hey 转移到另一个软件,该软件可以按照我的意愿绘制漂亮的图。如果这两种方法中的任何一种可行,请给出具体步骤。
编辑:
在使用了以下有用的方法后,我仍然不得不使用像 plot (j,i) 这样的技巧,而不是无辜的 plot(i,j)。这是因为矩阵 (i,j) 映射到图形图 (x,y) 为 x=j, y=i。有类似的解决方法吗?矩阵元素是(行#,列#)。但在二维 matlab 图中,我们将其位置表示为 (column #, row #)。我只是在猜测是否有一些 matlab 内置函数来处理这个问题。就像我会给它(行#,列#)但matlab会绘制(列#,行#)。有这样的功能吗?
【问题讨论】:
-
Luis Mendo 在下面的回答应该告诉您您需要。除此之外,您应该查看 Matlab 图形系统的文档,特别是 Axes properties。图形系统非常通用,很多问题不用花招就能解决。
标签: matlab