两个具有相同x轴的y轴

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

可能是重复的问题:
如何在一个图中绘制4条曲线,带有3个y轴

假设这是我在 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),因此在0和9本身已经是刻度的情况下,在中间有N-2个刻度。我希望y1和y2指向同一个y轴,该轴显示在左侧,具有0和max([y1,y2])的刻度以及M个更多的刻度。 然后我想在右侧有另一个轴,其中y3指的是...
y1,y2和y3应该在同一个图例框中具有条目... 到目前为止,谢谢!
编辑:啊,刚刚发现这个:在单个图中绘制4个曲线,带有3个y轴,也许我可以自己构建...我现在会立即尝试!
编辑:当使用对数x轴时怎么办?!

1
对于您的目的,plotyy 应该足够了。 - mbauman
谢谢,是的,我通过使用这个链接中的方法使它工作了:http://www.mathworks.com/matlabcentral/fileexchange/9016-addaxis。我更愿意使用plotyy,但我不知道如何在同一轴上绘制x vs y1和y2,而只在另一个轴上绘制x vs y3!因为plotyy只接受参数(x,y1,x,y2)。 - tim
只是提醒一下:这不是重复内容。 - tim
1个回答

12

请参阅此处的使用多个X轴和Y轴文档。 像这样做应该可以解决问题:

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;。这样做风格更好,速度也更快。


这对我不起作用。只有当我删除最后一个绘图命令时,我才能看到第二个轴(但是那时我会在顶部有第二个x轴)。当使用第三个绘图命令时,y轴还会额外显示在左侧。 - tim
1
教会我发布我没有测试过的代码。我错过了第二个轴上的“hold”。现在我已经测试过了,它对我有效。 - mbauman
1
@Matt B.:我会用低级别的LINE替换所有的PLOT(这样你就不需要使用hold命令),给它们不同的颜色,将它们的句柄保存在一个向量中,并添加一个图例:legend(hLines, 'y1','y2','y3') - Amro
@MattB:首先感谢你!你说的关于arrayfun的话是对的,那只是一个快速(在这种情况下不好的)示例...我会试一下的! - tim
好的,我尝试了一下,甚至使用semilogx也可以工作! - tim
1
+1 这个回答比被重复的问题所接受的回答更详细。 - RaveTheTadpole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接