在MATLAB中将y轴翻转

33

在matlab中的图表中,是否有一种方法可以将y轴上下颠倒,使得y轴的正方向指向下方而不是上方?

(我请求您,请不要说,打印出来然后把纸翻过来;-)


@Rook 请注意Ejo60的答案,我认为现在这里是最好的答案。 - Léo Léopold Hertz 준영
5个回答

54

在Matlab中,'YDir' 轴属性 可以是 'normal''reverse'。默认情况下,大多数图形的Y轴方向为 'normal',但某些图形将自动更改为 'reverse',例如imageimagesc函数。

您可以使用set函数或点索引(在较新的MATLAB版本中)设置轴的y轴方向:

h = gca;  % Handle to currently active axes
set(h, 'YDir', 'reverse');
% or...
h.YDir = 'reverse';

我对其他答案中有关'YDir'属性已经消失或出现错误的说法感到困惑。在2013年、2014年或2016年版本的MATLAB中,我没有看到任何这样的行为。我只遇到了两个潜在的陷阱:

  • 该属性不能使用单元数组设置,只能使用字符串:

  • >> set(gca, 'YDir', {'reverse'});
    Error using matlab.graphics.axis.Axes/set
    While setting property 'YDir' of class 'Axes':
    Invalid enum value. Use one of these values: 'normal' | 'reverse'.
    

    虽然这个可以工作:

    set(gca, {'YDir'}, {'reverse'});  % Property name is also a cell array
    
  • gca函数不能在执行点索引时作为句柄交替使用(这就是为什么我在上面的示例中首先将其保存到变量h中的原因):

  • >> gca.YDir
    Undefined variable "gca" or class "gca.YDir". 
    >> gca.YDir = 'reverse'  % Creates a variable that shadows the gca function
    gca = 
      struct with fields:
    
        YDir: 'reverse'
    

最后,如果你想要一些可以在不考虑当前状态的情况下切换'YDir'属性的代码,你可以这样做:

set(gca, 'YDir', char(setdiff({'normal', 'reverse'}, get(gca, 'YDir'))));
% or...
h = gca;
h.YDir = char(setdiff({'normal', 'reverse'}, h.YDir));

太棒了!(我非常喜欢Matlab和SO的组合,在快速进行计算时 :)) - Rook
3
如果情节对应于3D情节,则通常默认情况下Y轴会被反转(您可以使用get(gca,'YDir')进行检查)。在这种情况下,请尝试:set(gca,'YDir','normal'); - tashuhka

9
该命令 axis ij 会反转 Y 轴(在 x 轴上方为负,在 x 轴下方为正)。

6

对于我来说,栈顶的解决方案并没有起作用,

  • imagesc(x,y,data) % 会导致画面翻转,y轴颠倒了

  • set(gca,'YDir','reverse'); % 报错

  • axis ij; % 还是会出现翻转的画面

下面的方法起到了作用:

imagesc(x,y,data); axis xy;  % results in the correct plot

我正在使用 Matlab 的版本(2013及以上版本),但其中的 YDir 属性已经消失了。


我认为这是这里最好的答案,特别是最后一行 imagesc(time,y,matrix); axis xy;。命令 set('YDir','reverse');set('YDir','normal'); 存在于我的 Matlab 2016a 中。我不明白你所说的某些属性已经消失了是什么意思;可能只是改变了。 - Léo Léopold Hertz 준영
据我所知,“'YDir'”属性一直存在,设置它从来没有给我带来过错误。在2013年、2014年和2016年的版本中,这对我都起作用。 - gnovice

2
更新此答案,因为它仍然是一个热门的 Google 结果: 从 R2014a 开始,正确翻转 Y 轴的方法如下:
>> axis ij

这个变化可以通过以下命令进行撤销。
>> axis ji

要翻转X或Z轴,请执行以下操作:

set(gca,'XDir','reverse');

set(gca,'ZDir','reverse');

个人认为保留YDir选项可能更容易,但我也不太确定。

据我所知,'YDir'属性一直存在,并且设置它从未给我带来过错误。这在2013年、2014年和2016年的版本中都适用于我。 - gnovice

1
作为对于 YDir 的替代方案(出于某些原因我目前无法看到),您可以使用 view 旋转坐标轴。若要将 y 轴翻转,可以使用
view(0,-90);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接