Matplotlib,如何在一侧获得刻度线,在另一侧获得刻度线?

Neu*_*tar 2 matplotlib

我希望在左右 y 轴上都有相应的刻度线。但是,我希望左侧 y 轴刻度位于轴外部,右侧 y 轴刻度位于轴内部。

我拥有的:

import matplotlib.pyplot as plt
ax = plt.subplot(1,1,1)
ax.tick_params(axis='y',which='both',direction='in',right=True)
Run Code Online (Sandbox Code Playgroud)

有没有办法让它ax.tick_params()只在右轴上工作?

Imp*_*est 6

实际上,轴两侧的刻度是相同的,因此不能仅更改轴一侧的刻度。

matplotlib < 3.1 的解决方案:

除了@Sheldore 的答案之外,人们可能还想共享双轴,否则双方都会不同步。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.tick_params(axis="y", direction='in', length=8)

ax2 = ax.twinx()
ax2.tick_params(direction="out", right=True, length=8)
ax2.get_shared_y_axes().join(ax,ax2)

plt.show()
Run Code Online (Sandbox Code Playgroud)

matplotlib >= 3.1 的解决方案

Matplotlib 3.1 引入了辅助轴。这在许多情况下非常有用,以前需要滥用双轴,如上所述。优点是不需要进一步的参数,就会自动同步。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.tick_params(axis="y", direction='in', length=8)

ax2 = ax.secondary_yaxis("right")
ax2.tick_params(axis="y", direction="out", length=8)

plt.show()
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出是相同的:

在此输入图像描述

  • 请注意,至少对于 matplotlib &lt; 3.1 答案,您需要在*之前*绘制任何数据。 (2认同)