假设我在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轴时的内容是什么?!
答案 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;
。它的风格要好得多,而且速度要快得多。