我有一个这样的数据框:
data_ = list(range(106))
index_ = pd.period_range('3/1/2004', '12/1/2012', freq='M')
df2_ = pd.DataFrame(data = data_, index = index_, columns = ['data'])
我想绘制这个数据帧。目前,我正在使用:
df2_.plot()
现在我想控制x轴上的标签(可能还有刻度)。特别是,我喜欢在轴上有每月刻度,并且可能每隔一个月或每季度标签都有一个标签。我也喜欢有垂直网格线。
我开始关注this example,但我已经无法构建timedelta。
答案 0 :(得分:4)
关于构造timedelta,datetime.timdelta()
没有指定月份的参数,所以坚持pd.date_range()
可能很方便。但是,我发现pandas.tslib.Timestamp
类型的对象与matplotlib刻度不匹配,因此您可以将它们转换为datetime.date
对象,如此
index_ = [pd.to_datetime(date, format='%Y-%m-%d').date()
for date in pd.date_range('2004-03-01', '2012-12-01', freq="M")]
首先定义matplotlib轴对象,然后将其传递给DataFrame.plot()
ax = plt.axes()
df2_.plot(ax=ax)
现在您可以为地图添加垂直网格线
ax.xaxis.grid(True)
使用matplotlib.dates.MonthLocator
指定季度xticks标签并将间隔设置为3
ax.xaxis.set_major_locator(dates.MonthLocator(interval=3))
最后,我发现蜱虫非常拥挤,所以我将它们格式化以获得更好的效果
ax.xaxis.set_major_formatter(dates.DateFormatter('%b %y'))
labels = ax.get_xticklabels()
plt.setp(labels, rotation=85, fontsize=8)
生成以下plot