matplotlib: 对齐双y轴

0 投票
1 回答
2954 浏览
提问于 2025-04-18 08:09

这个问题的答案建议我尝试使用 set_ylimget_ylim 来对齐两个双Y轴。但是,这对我来说似乎没有效果。

代码片段:

fig, ax1 = plt.subplots()

yLim = [minY, maxY]
xLim = [0, 0.01]

for x in analysisNumbers:
    ax1.plot(getData(x), vCoords, **getStyle(x))

ax1.set_yticks(vCoords)
ax1.grid(True, which='major')


ax2 = ax1.twinx()
ax2.set_yticks(ax1.get_yticks())
ax2.set_ylim(ax1.get_ylim())
ax2.set_ylim(ax1.get_ylim())

plt.xlim(xLim[0], xLim[1])
plt.ylim(yLim[0], yLim[1])

plt.minorticks_on()

plt.show()

图表输出(在新窗口打开图片):

在这里输入图片描述

这两个双Y轴应该是一样的,但实际上并不是。它们的标签是相同的,但对齐却不一样(看看零点没有对齐)。这是怎么回事呢?

1 个回答

1

正如tcaswell在评论中提到的,plt.ylim()只会影响一个坐标轴。如果你把这些代码:

ax2.set_ylim(ax1.get_ylim())
ax2.set_ylim(ax1.get_ylim())

plt.xlim(xLim[0], xLim[1])
plt.ylim(yLim[0], yLim[1])

换成这个:

ax1.set_ylim(yLim[0], yLim[1])
ax2.set_ylim(ax1.get_ylim())

plt.xlim(xLim[0], xLim[1])

这样做的话,应该就能达到你想要的效果了。

撰写回答