我有一个这样的数据框:
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'])
Run Code Online (Sandbox Code Playgroud)
我想绘制这个数据框。目前,我正在使用:
df2_.plot()
Run Code Online (Sandbox Code Playgroud)
现在我喜欢控制 x 轴上的标签(可能还有刻度)。特别是,我喜欢在轴上有每月的刻度,并且可能每隔一个月或每季度有一个标签。我也喜欢有垂直的网格线。
我开始研究这个例子,但我已经无法构建 timedelta。
小智 8
关于构造 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")]
Run Code Online (Sandbox Code Playgroud)
通过首先定义一个 matplotlib 轴对象,然后将其传递给,可以添加网格线和自定义轴标签 DataFrame.plot()
ax = plt.axes()
df2_.plot(ax=ax)
Run Code Online (Sandbox Code Playgroud)
现在您可以在绘图中添加垂直网格线
ax.xaxis.grid(True)
Run Code Online (Sandbox Code Playgroud)
并通过使用matplotlib.dates.MonthLocator并将间隔设置为 3来指定季度 xticks 标签
ax.xaxis.set_major_locator(dates.MonthLocator(interval=3))
Run Code Online (Sandbox Code Playgroud)
最后,我发现蜱虫非常拥挤,所以我对它们进行了格式化以使其更贴合
ax.xaxis.set_major_formatter(dates.DateFormatter('%b %y'))
labels = ax.get_xticklabels()
plt.setp(labels, rotation=85, fontsize=8)
Run Code Online (Sandbox Code Playgroud)
生产以下产品:
| 归档时间: |
|
| 查看次数: |
12696 次 |
| 最近记录: |