通过 plotyy 在 MATLAB 中绘制 2 个垂直轴时设置轴限制

Posted

技术标签:

【中文标题】通过 plotyy 在 MATLAB 中绘制 2 个垂直轴时设置轴限制【英文标题】:Set axis limits when plotting 2 vertical axes in MATLAB via plotyy 【发布时间】:2013-10-05 11:37:46 【问题描述】:

我有以下数据集要绘制:

data1 = [ 3 6 99 4 5];
data2 = [ 0.2 1.5 1.75 1.0 1.2];

我的情况的特殊之处在于我需要数据点data1(3),它等于99显示在图表上。我使用 99 作为将观察结果推到所需轴限制之外的一种方式,这样对于自变量的某些值就没有可见的观察结果。 (我只用标记绘制数据点,没有线条。)

虽然data1data2 具有完全不相关的尺度和含义,但它们共享完全相同的因变量:

X=40:1:44

我正在使用以下命令进行绘图,这些命令源自MATLAB plotyy documentation page:

[AX,H1,H2] = plotyy(X,data1,X,data2);

set(get(AX(1),'Ylabel'),'String','This is vertical axis 1') 
set(get(AX(2),'Ylabel'),'String','This is vertical axis 2')     

set(H1,'LineStyle','none','Marker','*');
set(H2,'LineStyle','none','Marker','s');

到目前为止,一切都很好。我无法弄清楚的是如何在两个垂直轴上实施正确的限制。我想要的限制是:

ylimits1=[0 3]
ylimits2=[0 10]

如何为每个垂直轴设置限制?


我试过了

set(get(AX(1),'Ylim'),ylimits1) 
set(get(AX(2),'Ylim'),ylimits2) 

foo = gca
set(foo(1),'ylim',ylimits1);
set(foo(2),'ylim',ylimits2);

但都不起作用。

【问题讨论】:

【参考方案1】:

以下应该有效:

[AX,H1,H2] = plotyy(X,data1,X,data2);

set(AX(1),'ylim',ylimits1);
set(AX(2),'ylim',ylimits2); 

【讨论】:

谢谢。你能解释一下为什么用set(get(AX(1),'Ylabel'),'String','This is vertical axis 1') 来设置label 属性是有意义的,而你只需要用set(AX(1),'ylim',ylimits1) 来设置ylim 属性吗?也就是为什么get(AX(1),...)这部分语句呢? 那么至少我不会被迷惑!不过,我了解您的解决方案,这很重要,因为它有效。再次感谢。 实际上我不能告诉你,为什么你的第一次尝试不起作用。但第二个肯定是错误的,因为gca 在这种情况下是错误的句柄。【参考方案2】:

你可以做一些其他随机的事情

x1 = 1:10
y1 = x1.^2
x2 = 10:120
y2 = sin(x2)
[AX,~,~] = plotyy(x1,y1,x2,y2);
set(get(AX(1),'Xlabel'),'String','both plots')
set(get(AX(2),'Ylabel'),'String','plot 2') 
set(AX(1),'YLim',[1  25],'YTick',7:23)

【讨论】:

以上是关于通过 plotyy 在 MATLAB 中绘制 2 个垂直轴时设置轴限制的主要内容,如果未能解决你的问题,请参考以下文章

matlab里怎么画一个x轴两个y轴的图

matlab二维三维图形绘制和坐标轴范围设置

MATLAB学习笔记——数据可视化

MATLAB如何画两个子图共用一个Y轴标签?

matlab散点连线怎么连?

绘制双坐标轴的图形