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

使用Pandas Grouper按多时间维度分组绘图的优化方案

解决方案

可以通过以下步骤同时满足使用Grouper、柱状图正常显示、X轴标签简洁不拥挤的需求:

1. 保留Grouper分组并格式化索引

使用pd.Grouper分组后,将时间索引格式化为简洁的%Y-%m字符串,既保留Grouper的灵活分组能力,又能得到清晰的标签:

# 使用Grouper按月分组求和
items = df.groupby(pd.Grouper(key='record_date', freq='M'))['transaction_today_amt'].sum()
# 将时间索引格式化为YYYY-MM格式的字符串
items.index = items.index.strftime('%Y-%m')

2. 调整柱状图宽度与X轴显示

使用matplotlib绘图时,设置柱子宽度,并调整X轴标签的旋转角度和显示间隔,避免拥挤:

plt.figure(figsize=(12, 6))  # 调整图表大小,预留更多标签空间
plt.bar(x=items.index, height=items.values, width=0.6)  # 设置柱子宽度,解决细线问题
plt.xticks(rotation=45, ha='right')  # 旋转标签并右对齐,减少横向拥挤
plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

3. 进阶:自定义X轴显示间隔(适用于大数据量)

如果数据时间跨度大,还可以设置只显示部分X轴标签,进一步优化显示效果:

import matplotlib.dates as mdates

# 保留时间索引的情况下,自定义日期显示规则
items = df.groupby(pd.Grouper(key='record_date', freq='M'))['transaction_today_amt'].sum()

plt.figure(figsize=(12, 6))
plt.bar(x=items.index, height=items.values, width=15)  # 按天数设置宽度,适配时间索引
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))  # 格式化日期为YYYY-MM
plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=3))  # 每3个月显示一个标签
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

这样既利用了pd.Grouper灵活的时间分组能力,又解决了柱状图细线、X轴标签拥挤的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:27:23