改变Matlab图的视角

时间:2015-02-11 16:00:06

标签: matlab

假设我有一个矩阵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。 enter image description here 所以我希望情节沿着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将绘制(列#,行#)。有这样的功能吗?

2 个答案:

答案 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行):

enter image description here

axis ij之后(第4行):

enter image description here

set(gca,'XAxisLocation','top')之后(第5行):

enter image description here

答案 1 :(得分:2)

如果我正确关注您正在寻找轴XAxisLocationYDir属性。您可以将它们分别设置为topreverse以获得所需的输出。您还可以将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])

其中包含以下内容:

enter image description here