如何在Pandas堆叠柱状图的X轴显示完整日期格式
解决Pandas堆叠柱状图X轴显示完整YYYY格式日期的问题
嘿,我明白你想要的效果——让堆叠柱状图的X轴显示像YYYY-MM这样的完整日期,而不是单独的月份或天数。问题出在你指定x=grouped.index.month这一步,这相当于把X轴的数据源换成了单纯的月份数字,自然丢失了年份信息。下面给你一个简单有效的解决方案:
核心思路
- 保留分组后的DatetimeIndex作为X轴的数据源,不要手动提取月份/天数;
- 用Matplotlib的日期格式化工具,把X轴标签设置成你想要的
YYYY-开头的格式; - 调整标签旋转角度,避免日期重叠影响可读性。
完整代码示例
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
相关产品推荐
相关产品推荐

