在xaxis上绘制条形图的刻度数

时间:2018-08-22 16:39:50

标签: pandas matplotlib

我有一个如下所示的时间序列数据帧:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randint(0,30,size=100),
              columns=["Random"],
              index=pd.date_range("20180101", freq='M',periods=100))

我试图用它做一个简单的条形图,但想控制x轴上刻度线标签的数量,否则标签将被挤压。 我的实际数据大小比此示例大得多。搜索其他类似问题后,我尝试了以下方法:

ax=df.plot.bar()
plt.title('Random Plot')
n=10
ticks = ax.axis.get_ticklocs()
ticklabels = [i.get_text() for i in ax.get_ticklabels()]
ax.xaxis.set_ticks(ticks[::n])
ax.xaxis.set_ticklabels(ticklabels[::n])
plt.show()

但是我有一个错误- AttributeError:“函数”对象没有属性“ get_ticklocs”

我想更改n的值,以便可以更改要在绘图上显示的月份标签。不知道这是否是明智的选择,以及为什么会导致错误。谢谢

1 个答案:

答案 0 :(得分:0)

您错过了x中的ticks = ax.axis.get_ticklocs()。您只需要ax.get_xticklabels()即可获取刻度标签列表,而无需了解列表。

请注意,您可能必须将格式化程序传递给x轴,才能以所需的格式获取日期。

此外,您正在混合使用ax.xaxis.getax.get,这可能会造成混淆。我已经做到了这一点,因此您的代码将变为:

df = pd.DataFrame(np.random.randint(0,30,size=100),
              columns=["Random"],
              index=pd.date_range("20180101", freq='M',periods=100))

ax=df.plot.bar()
plt.title('Random Plot')
n=10

ticks = ax.xaxis.get_ticklocs()
ticklabels = ax.xaxis.get_ticklabels()

ax.xaxis.set_ticks(ticks[::n])
ax.xaxis.set_ticklabels(ticklabels[::n])

plt.show()