假设我有一个矩阵hey
15x15。我想将矩阵的值绘制为2D图,以便更好地进行可视化。但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运行+ ve向下从1到15。
所以我希望情节沿着y显示+ 1到+15,左上角的原点和x分级,但是+1到+15的值写在图的顶部而不是下面。
怎么做?在极端的情况下,我也愿意将矩阵hey
转移到另一个可以按照我的意愿做好事情的软件。如果可能有两种替代方案中的任何一种,请采取具体步骤。
修改
使用下面的有用方法后,我仍然需要使用像plot (j,i)
这样的技巧而不是无辜的plot(i,j)
。这是因为矩阵(i,j)
被映射到图表(x,y)
为x=j, y=i
。是否有类似的解决方法?矩阵元素是(行#,列#)。但在2D matlab图中,我们将它的位置表示为(列#,行#)。我只是猜测是否有一些matlab内置功能来处理这个问题。就像我会给它(行#,列#),但matlab将绘制(列#,行#)。有这样的功能吗?
答案 0 :(得分:3)
我认为axis ij
符合您的要求:
axis ij
将坐标系原点放在左上角。 i -axis是垂直的,值从上到下增加。 j -axis是水平的,值从左到右增加。
要在顶部找到 x 轴,请将轴的'XAxisLocation'
更改为'top'
(默认为'bottom'
)。
示例:
x = 1:10;
y = x.^2;
plot(x,y)
axis ij
set(gca,'XAxisLocation','top')
原始图(上面代码的第1-3行):
axis ij
之后(第4行):
set(gca,'XAxisLocation','top')
之后(第5行):
答案 1 :(得分:2)
如果我正确关注您正在寻找轴XAxisLocation
和YDir
属性。您可以将它们分别设置为top
和reverse
以获得所需的输出。您还可以将XTick
属性设置为1:15
,以显示1到15之间的所有值。
示例:
clear
clc
%// Create dummy data
[x,y] = meshgrid(1:15,1:15);
u = cos(x).*y;
v = sin(x).*y;
figure
quiver(x,y,u,v)
set(gca,'XAxisLocation','top','XTick',1:15,'YDir','reverse')
hold on
%// I changed the coordinated of the rectangle to fit with the change in
%y-axis.
rectangle('Position',[3,3,2,3],...
'EdgeColor','black',...
'LineWidth',2,...
'FaceColor','cyan')
axis([0 15 0 15])
其中包含以下内容: