You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas堆叠柱状图的X轴显示完整日期格式

解决Pandas堆叠柱状图X轴显示完整YYYY格式日期的问题

嘿,我明白你想要的效果——让堆叠柱状图的X轴显示像YYYY-MM这样的完整日期,而不是单独的月份或天数。问题出在你指定x=grouped.index.month这一步,这相当于把X轴的数据源换成了单纯的月份数字,自然丢失了年份信息。下面给你一个简单有效的解决方案:

核心思路

  1. 保留分组后的DatetimeIndex作为X轴的数据源,不要手动提取月份/天数;
  2. 用Matplotlib的日期格式化工具,把X轴标签设置成你想要的YYYY-开头的格式;
  3. 调整标签旋转角度,避免日期重叠影响可读性。

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 确保日期列格式正确(建议用方括号索引,避免属性访问的潜在问题)
df['payout'] = pd.to_datetime(df['payout'])

# 按月份分组求和,此时grouped的索引是DatetimeIndex(格式为月末日期,如2023-01-31)
grouped = df.groupby(pd.Grouper(key='payout', freq='M')).sum()

# 绘制堆叠柱状图,不需要指定x参数,默认使用索引作为X轴
ax = grouped.plot(kind='bar', stacked=True)

# 设置X轴日期格式为YYYY-MM(如果你需要更详细的日期,比如YYYY-MM-DD,改成'%Y-%m-%d'即可)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

# 旋转X轴标签45度,防止重叠
plt.xticks(rotation=45)

# 自动调整布局,避免标签被画布截断
plt.tight_layout()

plt.show()

为什么这个方法有效?

当你直接调用grouped.plot()时,Pandas会自动把Datetime类型的索引作为X轴数据,此时X轴本质上还是日期类型,只是默认显示格式可能不符合你的需求。通过mdates.DateFormatter,我们可以自定义显示格式,既保留完整的年-月信息,又能让图表更美观。

如果你的分组频率不是月份(比如按天freq='D'),只需要修改日期格式化字符串即可,灵活性很高。

内容的提问来源于stack exchange,提问作者user40

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:37:09