Matplotlib:多个y轴,网格线应用于两个轴?

4

我有一个使用Matplotlib创建的带有两个y轴的图形:

ax1 = fig.add_subplot(111)
ax1.grid(True, color='gray')
ax1.plot(xdata, ydata1, 'b', linewidth=0.5)
ax2 = ax1.twinx()
ax2.plot(xdata, ydata2, 'g', linewidth=0.5)

我需要网格线,但我希望它们适用于两个y轴而不仅仅是左侧的轴。每个轴的刻度将有所不同。我得到的是只与左侧轴上的值匹配的网格线。
Matplotlib能为我解决这个问题吗?还是我必须自己解决?
编辑:不要认为我完全清楚,我希望两个y轴的主要刻度对齐,但是它们的刻度和范围可能非常不同,因此手动设置最小值和最大值会很棘手。我希望Matplotlib能够为我完成这个“棘手”的部分。谢谢。
1个回答

3

编辑

考虑这个简单的例子:

from pylab import *

# some random values
xdata = arange(0.0, 2.0, 0.01)
ydata1 = sin(2*pi*xdata)
ydata2 = 5*cos(2*pi*xdata) + randn(len(xdata))

# number of ticks on the y-axis
numSteps = 9;

# plot
figure()

subplot(121)
plot(xdata, ydata1, 'b')
yticks( linspace(ylim()[0],ylim()[1],numSteps) )
grid()

subplot(122)
plot(xdata, ydata2, 'g')
yticks( linspace(ylim()[0],ylim()[1],numSteps) )
grid()

show()

alt text


谢谢,我知道我可以手动设置限制,但我正试图避免这种情况 :) - Tim
这并不复杂,你所要做的就是取出ydata1ydata2的最小/最大值,并将其设置为两个坐标轴的y轴限制。 - Amro
我认为我无法达到想要的效果,我已经编辑了问题,试图澄清我想做什么。 - Tim
@Tim:我编辑了我的答案...现在你可以看到这些图有两个不同的范围,但是y轴上的yticks数量相同。 - Amro
谢谢,虽然不完全是我希望得到的,但这已经给了我获取所需结果的信息。我之前并不熟悉linspace()函数,现在应该会方便多了。 - Tim

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