matplotlib 轴上有最大数量的刻度标签。但是,此限制远高于 1000,您在创建图形时首先会遇到严重滞后。
matplotlib 通常的自动标记是轴配备了所需数量的标签。 IE。如果您在绘图上绘制 50 个点,则您也不希望有 50 个标签。此外,如果您在 0.853164 处绘制一个点,您将不希望将这样的奇数显示为轴上的刻度标签。
现在,我想不出任何理由 matplotlib 会生成您报告的标签 2000,2002,2005,2007,2010,2012,2015,因为刻度的自动定位器会选择轴上的等距点。如需有关此特定问题的任何帮助,需要MCVE。
但总的来说,您可以选择两个概念。
数值轴
在绘制数字时,matplotlib 默认会选择一个线性轴并自动勾选它。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(2000, 2017)
y = np.random.randint(5,21, size=len(x))
plt.bar(x,y)
plt.show()
在这种情况下,选择 2.5 个单位的等距刻度以在轴上具有 7 个间隔良好的刻度。相反,如果您希望每根柱都打勾,您可以使用自定义代码。
例如一个MultipleLocator,间隔设置为1,
import matplotlib.ticker as mticker
plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))
plt.gca().tick_params(axis="x", rotation=90)
或者,FixedLocator,其位置设置为条形的 x 值,
import matplotlib.ticker as mticker
plt.gca().xaxis.set_major_locator(mticker.FixedLocator(x))
plt.gca().tick_params(axis="x", rotation=90)
分类轴
您也可以决定您的 xaxis 应该是分类的。这意味着每个唯一值都有自己的刻度,并且这些刻度是等距的,与它们的值无关。最简单的方法是将数字转换为字符串。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(2000, 2017)
y = np.random.randint(5,21, size=len(x))
cats = list(map(str, x))
plt.bar(cats,y)
plt.gca().tick_params(axis="x", rotation=90)
plt.show()
结果在视觉上和上面一样,但是这一次,数字2000不在位置2000,而是在它的索引0,2001在1等等。