我有一个如下所示的时间序列数据帧:
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
的值,以便可以更改要在绘图上显示的月份标签。不知道这是否是明智的选择,以及为什么会导致错误。谢谢
答案 0 :(得分:0)
您错过了x
中的ticks = ax.axis.get_ticklocs()
。您只需要ax.get_xticklabels()
即可获取刻度标签列表,而无需了解列表。
请注意,您可能必须将格式化程序传递给x轴,才能以所需的格式获取日期。
此外,您正在混合使用ax.xaxis.get
和ax.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()