两个y轴具有相同的x轴

时间:2011-07-04 16:15:46

标签: matlab axis add

  

可能重复:
  Plotting 4 curves in a single plot, with 3 y-axes

假设我在Matlab中有以下数据集作为示例:

x = linspace(0, 9, 10);
y1=arrayfun(@(x) x^2,x);
y2=arrayfun(@(x) 2*x^2,x);
y3=arrayfun(@(x) x^4,x);

因此您可以看到它们具有相同的x轴。现在我想要以下情节:

一个x轴,限制为0到9(那些限制也应该是刻度),带有N个刻度(我希望能够自己定义N),因此在中间有N-2个刻度,因为0和9本身已经蜱。我希望y1和y2引用相同的y轴,左边显示的是0和最大值([y1,y2]),并且中间有M个刻度。 比我想在右边有另一个轴,其中y3指的是......

y1,y2和y3应该在同一个图例框中有条目... 谢谢到目前为止!

编辑:argh刚发现这个:Plotting 4 curves in a single plot, with 3 y-axes也许我可以把它自己搞砸了......我现在就试试吧!

编辑:使用对数x轴时的内容是什么?!

1 个答案:

答案 0 :(得分:12)

请参阅Using Multiple X- and Y-Axes上的此文档。这样的事情可以解决问题:

figure
ax1 = gca;
hold on
plot(x,y1)
plot(x,y2)
ax2 = axes('Position',get(ax1,'Position'),...
       'XAxisLocation','top',...
       'YAxisLocation','right',...
       'Color','none',...
       'XColor','k','YColor','k');
linkaxes([ax1 ax2],'x');
hold on
plot(x,y3,'Parent',ax2);

编辑:哎呀,错过了一个暂停命令。应该现在就行。另外,要删除顶部的第二个x轴,只需将'XTickLabel',[]添加到axes命令。

顺便说一句,你真的不应该arrayfun使用y1=arrayfun(@(x) x^2,x);。相反,请使用.^运算符:y1=x.^2;。它的风格要好得多,而且速度要快得多。