我想在彼此之上绘制多个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');
现在更换以下两行:
myY1=myT*3;
myY2=1./cos(myT);
你得到了
似乎只保持蓝色曲线和水平红色曲线。另一条红色曲线不是。为什么这样做以及我能做些什么来保持所有曲线?
修改
将产生第二个数字的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');
我认为存在一些干扰,因为hold
和set
会重复出现。
答案 0 :(得分:1)
当您致电plotyy
时,第一个subplot
来电中的第二个轴对象将被删除。虽然这可能看起来很奇怪,但它是documented behavior:
如果新的子图轴与现有轴重叠,则MATLAB将删除 现有的轴。要在现有子图上叠加新轴, 使用axes命令。例如,
subplot('Position',[.35 .35 .3 .3])
删除任何基础子图,但axes('Position',[.35 .35 .3 .3])
在图中间放置一个新轴而不删除任何轴 基础轴。
我建议手动创建多个axes
对象并定位/堆叠它们,而不是使用plotyy
。可以找到一个例子here。