如何在matplotlib中设置次要刻度的位置

时间:2015-03-02 12:58:40

标签: python 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的位置......如何手动设置次刻度的位置?

1 个答案:

答案 0 :(得分:15)

您可以使用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()

Example plot

使用AutoMinorLocator的优势在于,如果您需要扩展数据,例如主要价格为[0, 10, 20, 30, 40, 50],那么您的次要价格将扩展至[5, 15, 25, 35, 45]个位置

如果您确实需要硬设置位置,即使在缩放/更改后,请查找matplotlib.ticker.FixedLocator。通过此,您可以传递固定列表,例如FixedLocator([0.5, 1.5, 2.5, 3.5, 4.5])