我如何在 matplotlib 中设置小刻度的位置

How can i set the location of minor ticks in matplotlib

我想在 matplotlib 绘图中的 x 轴上在次要刻度的位置而不是主要刻度的位置绘制一个网格。我的市长标记位于位置 0、1、2、3、4、5 并且必须保留在那里。我希望网格为 0.5、1.5、2.5、3.5、4.5。

....
from matplotlib.ticker import MultipleLocator
....
minorLocator   = MultipleLocator(0.5)
ax.xaxis.set_minor_locator(minorLocator)
plt.grid(which='minor')

上面的代码不起作用,因为它给出了 0.5、1.0、1.5 等位置,我如何手动设置次刻度的位置?

您可以使用 matplotlib.ticker.AutoMinorLocator。这将自动将 N-1 个次要刻度放置在主刻度之间等距的位置。

例如,如果您使用 AutoMinorLocator(5),那么这将在每对主刻度之间放置 4 个等距的次刻度。对于您的用例,您希望 AutoMinorLocator(2) 只在中点放置一个。

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.ticker import AutoMinorLocator

N = 1000
x = np.linspace(0, 5, N)
y = x**2

fig, ax = plt.subplots()

ax.plot(x, y)

minor_locator = AutoMinorLocator(2)
ax.xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor')

plt.show()

使用 AutoMinorLocator 的优点是如果您需要扩大数据,例如您的主要刻度位于 [0, 10, 20, 30, 40, 50],那么您的次要刻度将扩大到位置 [=16] =].

如果您确实需要硬设置位置,甚至在 scaling/changing 之后,请查找 matplotlib.ticker.FixedLocator。有了这个你可以传递一个固定列表,例如 FixedLocator([0.5, 1.5, 2.5, 3.5, 4.5]).