gpt4 book ai didi

python - 带日期的 Matplotlib - 更改每月数据的标签和刻度

转载 作者:行者123 更新时间:2023-11-28 22:30:50 24 4
gpt4 key购买 nike

我有一个这样的数据框:

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。

最佳答案

关于构建 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 并将间隔设置为 3 来指定季度 xticks 标签

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)

产生以下内容:

enter image description here

关于python - 带日期的 Matplotlib - 更改每月数据的标签和刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com