Pyplot set_xticks无法按预期工作

时间:2018-03-08 06:47:22

标签: python matplotlib plot

我想通过指定每次跳过多少刻度来设置x刻度密度。例如,如果x轴标记为100个连续日期,并且我想跳过每10个日期,那么我将执行类似

的操作
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

ts = pd.period_range("20060101", periods=100).strftime("%Y%m%d")
y = np.random.randn(100)
ax = plt.subplot(1, 1, 1)
ax.plot(ts, y)
xticks = ax.get_xticks()
ax.set_xticks(xticks[::10])
plt.xticks(rotation="vertical")
plt.show()

然而输出不合适。 Pyplot只选择前几个刻度并将它们全部放在错误的位置,尽管间距是正确的:

enter image description here

我可以做些什么来获得所需的输出?也就是说,刻度应该是:

['20060101' '20060111' '20060121' '20060131' '20060210' '20060220'
 '20060302' '20060312' '20060322' '20060401']

@ klim的回答似乎在轴上放了正确的标记,但标签仍然不会显示。日期轴正确标记但没有标签的示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

也设置xticklabels。像这样。

xticks = ax.get_xticks()
xticklabels = ax.get_xticklabels()
ax.set_xticks(xticks[::10])
ax.set_xticklabels(xticklabels[::10], rotation=90)

忘掉上面的内容,这是行不通的。

这个怎么样?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

ts = pd.period_range("20060101", periods=100).strftime("%Y%m%d")
x = np.arange(len(ts))
y = np.random.randn(100)
ax = plt.subplot(1, 1, 1)
ax.plot(x, y)

ax.set_xticks(x[::10])
ax.set_xticklabels(ts[::10], rotation="vertical")

plt.show()

这适用于我的机器。