如何在Matlab中将多个plotyy绘制在一起

时间:2016-05-18 12:32:42

标签: matlab plot

我想在彼此之上绘制多个plotyy。在this question中,有人提到使用plotyy时,不能只使用hold on。报告的正确命令为hold(...,'on')

请考虑以下代码:

figure(2)
subplot(1,2,1)

myT=0:1:10;
myY1=myT*2;
myY2=1./sin(myT);
[dummy,h1,h2]=plotyy(myT,myY1,myT,[myY2' 2*ones(length(myT),1)]);
    hold(dummy(1),'on')
    hold(dummy(2),'on')
    set(dummy(1),'ylim',[0 20]);
    set(dummy(2),'ylim',[0 5]);
    set(dummy(1),'Ycolor','k')
    set(dummy(2),'Ycolor','k')
    set(h1,'color','b');
    set(h2,'color','r');

执行一次,你得到 enter image description here

现在更换以下两行:

myY1=myT*3;
myY2=1./cos(myT);
你得到了 enter image description here

似乎只保持蓝色曲线和水平红色曲线。另一条红色曲线不是。为什么这样做以及我能做些什么来保持所有曲线?

修改

将产生第二个数字的MWE:

figure(2)
subplot(1,2,1)

myT=0:1:10;
myY1=myT*2;
myY2=1./sin(myT);
[dummy,h1,h2]=plotyy(myT,myY1,myT,[myY2' 2*ones(length(myT),1)]);
    hold(dummy(1),'on')
    hold(dummy(2),'on')
    set(dummy(1),'ylim',[0 20]);
    set(dummy(2),'ylim',[0 5]);
    set(dummy(1),'Ycolor','k')
    set(dummy(2),'Ycolor','k')
    set(h1,'color','b');
    set(h2,'color','r');

%%

figure(2)
subplot(1,2,1)

myY1=myT*3;
myY2=1./cos(myT);
[dummy,h1,h2]=plotyy(myT,myY1,myT,[myY2' 2*ones(length(myT),1)]);
    hold(dummy(1),'on')
    hold(dummy(2),'on')
    set(dummy(1),'ylim',[0 20]);
    set(dummy(2),'ylim',[0 5]);
    set(dummy(1),'Ycolor','k')
    set(dummy(2),'Ycolor','k')
    set(h1,'color','b');
    set(h2,'color','r');

我认为存在一些干扰,因为holdset会重复出现。

1 个答案:

答案 0 :(得分:1)

当您致电plotyy时,第一个subplot来电中的第二个轴对象将被删除。虽然这可能看起来很奇怪,但它是documented behavior

  

如果新的子图轴与现有轴重叠,则MATLAB将删除   现有的轴。要在现有子图上叠加新轴,   使用axes命令。例如,subplot('Position',[.35 .35 .3 .3])   删除任何基础子图,但axes('Position',[.35 .35 .3 .3])   在图中间放置一个新轴而不删除任何轴   基础轴。

我建议手动创建多个axes对象并定位/堆叠它们,而不是使用plotyy。可以找到一个例子here