Matplotlib:多个y轴,网格线同时应用?

5 投票
1 回答
8035 浏览
提问于 2025-04-16 03:47

我有一个用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轴,而不仅仅是左边的那个。因为这两个轴的刻度会不一样。目前我得到的网格线只和左边的y轴的数值对应。

Matplotlib能帮我解决这个问题吗,还是我得自己来处理?

编辑:我觉得我之前说得不够清楚,我希望两个y轴的主要刻度能够对齐,但它们的刻度和范围可能差别很大,这让手动设置最小值和最大值变得有点棘手。我希望Matplotlib能帮我处理这个“棘手”的部分。谢谢!

1 个回答

4

编辑

考虑这个简单的例子:

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

撰写回答