如何在绘制熊猫系列的同时标记新年的开始?
Posted
技术标签:
【中文标题】如何在绘制熊猫系列的同时标记新年的开始?【英文标题】:How to mark the beginning of a new year while plotting pandas Series? 【发布时间】:2017-10-20 10:07:42 【问题描述】:我正在绘制这样的数据:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
a = pd.DatetimeIndex(start='2010-01-01',end='2011-06-01' , freq='M')
b = pd.Series(np.random.randn(len(a)), index=a)
我希望绘图采用条形格式,所以我使用这个:
b.plot(kind='bar')
这是我得到的:
如您所见,日期的格式是完整的,非常丑陋且不可读。我碰巧测试了这个命令,它创建了一个非常好的日期格式:
b.plot()
如您所见:
我非常喜欢这种格式,它包括月份,标志着一年的开始,并且易于阅读。
在做了一些搜索之后,我最接近该格式的是使用这个:
fig, ax = plt.subplots()
ax.plot(b.index, b)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
但是输出看起来像这样:
我可以通过这种方式在 x 轴上显示月份名称,但我更喜欢第一种格式。那要优雅得多。有谁知道我怎样才能为我的条形图获得完全相同的 xticks?
【问题讨论】:
this 有帮助吗? @Nuageux 感谢您的评论。这是一个不错的帖子,但不是我想要的。如果我能像第二个数字那样只在每年一月添加年份,那就太好了。 【参考方案1】:这里有一个解决方案,可以为您提供所需的格式。您可以直接编辑刻度标签,并使用set_major_formatter()
方法:
fig, ax = plt.subplots()
ax.bar(b.index, b)
ticklabels = [item.strftime('%b') for item in b.index] #['']*len(b.index)
ticklabels[::12] = [item.strftime('%b\n%Y') for item in b.index[::12]]
ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(ticklabels))
ax.set_xticks(b.index)
plt.gcf().autofmt_xdate()
输出:
【讨论】:
以上是关于如何在绘制熊猫系列的同时标记新年的开始?的主要内容,如果未能解决你的问题,请参考以下文章