显示仅具有主要刻度标签的小刻度

时间:2013-08-27 14:11:35

标签: python matplotlib labels

我想在轴上有小刻度,但只显示主刻度标签。例如,次要刻度是[19,20,21,... 40,41],主刻度标签是[20,25,30,35,40]。我该怎么做?下面的代码没有完成这项工作。我知道可以使用像this example这样的MultipleLocator,FormatStrFormatter。但是,我在轴上的值有点“奇怪”,起始值为19(不是20),结束值为41,这在使用MultipleLocator时会造成困难。

import numpy as np
from matplotlib import pylab as plt

fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(19.,41,23)
y = x**2
ax.plot(x,y)
ax.set_xticks(x)
ax.set_xticklabels(x, minor=False)
plt.show()

它给了我以下情节: enter image description here

ax.set_xticklabels([20, 25, 30, 35, 40], minor=False) 给我另一个情节: enter image description here 如何更改我的代码以获得我需要的内容。非常感谢你的帮助!

1 个答案:

答案 0 :(得分:15)

我真的不明白为什么在你的例子中使用MultipleLocator很困难。

在代码中添加这些行

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

majorLocator   = MultipleLocator(5)
majorFormatter = FormatStrFormatter('%d')
minorLocator   = MultipleLocator(1)

ax.xaxis.set_major_locator(majorLocator)
ax.xaxis.set_major_formatter(majorFormatter)
ax.xaxis.set_minor_locator(minorLocator)

你会得到这个图像,我明白这是你想要的(不是吗?): enter image description here


如果您不希望刻度显示在您的数据范围下方,请使用FixedLocator手动定义刻度:

from matplotlib.ticker import FixedLocator

majorLocator   = FixedLocator(np.linspace(20,40,5))
minorLocator   = FixedLocator(np.linspace(19,41,23))

你会得到这个图像: enter image description here