改变Matlab绘图的透视图

改变Matlab绘图的透视图,matlab,Matlab,假设我有一个矩阵hey15x15。我想将矩阵的值绘制为2D图,以便更好地可视化。但Matlab绘图时使用的约定是原点位于左下角,正x位于左侧,正y位于原点的向上方向 但我想画出这样的图,原点在左上角,+vex在左边,+vey在下面 所以我只是耍了个小把戏 figure axis([0 15 -15 0]); daspect([1,1,1]) hold on rectangle('Position',[3,-6,2,3],... 'EdgeColor','black',...

假设我有一个矩阵
hey
15x15。我想将矩阵的值绘制为2D图,以便更好地可视化。但Matlab绘图时使用的约定是原点位于左下角,正x位于左侧,正y位于原点的向上方向

但我想画出这样的图,原点在左上角,+vex在左边,+vey在下面

所以我只是耍了个小把戏

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');
图
轴([0 15-15 0]);
daspect([1,1,1])
等等
矩形('位置',[3,-6,2,3],。。。
“EdgeColor”、“black”和,。。。
“线宽”,2,。。。
“FaceColor”、“青色”)
对于i=1:nrows
对于j=1:n列
如果char(嘿(i,j))=='^'
文本(j,-i,“^”);
elseif char(嘿(i,j))=='>'
文本(j,-i,“>”);
elseif char(嘿(i,j))=='v'
文本(j,-i,'v');
elseif char(嘿(i,j))='我想你想要什么就做什么:

轴ij
将坐标系原点放置在左上角。i轴垂直,值从上到下递增。j轴水平,值从左向右递增

要在顶部定位x轴,请将轴的
'XAxisLocation'
更改为
'top'
(默认值为
'bottom'

例如:

x = 1:10;
y = x.^2;
plot(x,y)
axis ij
set(gca,'XAxisLocation','top') 
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])
原始图(上述代码第1-3行):

在轴ij之后(第4行):

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

我想你想要什么就做什么:

轴ij
将坐标系原点放置在左上角。i轴垂直,值从上到下递增。j轴水平,值从左向右递增

要在顶部定位x轴,请将轴的
'XAxisLocation'
更改为
'top'
(默认值为
'bottom'

例如:

x = 1:10;
y = x.^2;
plot(x,y)
axis ij
set(gca,'XAxisLocation','top') 
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])
原始图(上述代码第1-3行):

在轴ij之后(第4行):

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


如果我正确遵循,则您正在查找轴
XAxisLocation
YDir
属性。您可以将它们分别设置为
top
reverse
,以获得所需的输出。您还可以将
XTick
属性设置为
1:15
,以显示从1到15的每个值

例如:

x = 1:10;
y = x.^2;
plot(x,y)
axis ij
set(gca,'XAxisLocation','top') 
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])
其中给出了以下内容:


如果我正确遵循,则您正在查找轴
XAxisLocation
YDir
属性。您可以将它们分别设置为
top
reverse
,以获得所需的输出。您还可以将
XTick
属性设置为
1:15
,以显示从1到15的每个值

例如:

x = 1:10;
y = x.^2;
plot(x,y)
axis ij
set(gca,'XAxisLocation','top') 
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])
其中给出了以下内容:


路易斯·门多在下面的回答应该告诉你需要什么。除此之外,您还应该特别了解Matlab图形系统的文档。图形系统是相当多功能的,许多问题都可以不借助技巧解决。路易斯·门多在下面的回答应该告诉你想要什么。除此之外,您还应该特别了解Matlab图形系统的文档。图形系统非常通用,许多问题都可以不借助技巧解决。哦,很好,我不知道这个命令哈哈,谢谢你和+1。对于漂亮的单线解决方案,+1。@Benoit_11实际上,如果您看到
axis
code,您会发现
axis ij
只需将
'YDir'
属性设置为
'reverse'
do@LuisMendo我的解决方案中仍然缺少一个链接。请参见编辑。@giffy可能
视图([90 90])
视图([-90 90])
?哦,很好,我不知道这个命令哈哈,谢谢你和+1。对于漂亮的单行解决方案,+1。@Benoit_11实际上,如果你看到
axis
代码,你会发现
axis ij
只是将
'YDir'
属性设置为
'reverse'
,像你一样do@LuisMendo我的解决方案中仍然缺少一个链接。请参见编辑。@giffy可能
视图([90 90])
视图([-90 90])
?Luis的答案更容易理解,并且最有可能被选择用于实施,但您的拜占庭式方法允许您解决其他几个问题。感谢您对
XAxisLocation
YDir
进行技术观察。我最初没有在OP中看到“x轴在顶部”的要求。我刚刚将其添加到我的答案中,现在我看到您首先做到了。我希望你不介意@Benoit_11我在问题中还提到,对于矩阵
(i,j)
被映射到图形图
(x,y)
作为
x=j,y=i
。因此,我仍然必须使用类似于
plot(j,i)
的技巧,而不是单纯的
plot(i,j)
。有类似的解决方法吗?没问题@LuisMendo!Luis的答案更容易理解,并且最有可能被选择用于实现,但您的拜占庭式方法允许您解决其他几个问题。感谢您对
XAxisLocation
YDir
进行技术观察。我最初没有在OP中看到“x轴在顶部”的要求。我刚刚将其添加到我的答案中,现在我看到您首先做到了。我希望你不介意@Benoit_11我在问题中还提到,对于矩阵
(i,j)
被映射到图形图
(x,y)
作为
x=j,y=i
。因此,我仍然必须使用类似于
plot(j,i)
的技巧,而不是单纯的
plot(i,j)
。有类似的解决方法吗?没问题@LuisMendo!