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

Pandas柱状图显示异常:月份名称不显示且销量分布错误求助

问题原因及解决方案

问题1:X轴显示数字而非月份名称

你绘图时手动指定Month = range(1,13)作为X轴位置,且plt.xticks(Month)仅设置了数字刻度,未关联转换后的月份名称。

问题2:图表销量最高月份与groupby结果不符

字符串类型的月份名称默认按字母顺序排序(如Apr、Aug、Dec...),而你用数字1-13对应X轴位置,导致groupby结果的顺序和X轴位置错位,出现数据不匹配。


修改后的完整代码

import calendar
import matplotlib.pyplot as plt

# 保留你已完成的月份转换代码
all_months_data["Month"] = all_months_data['Month'].apply(lambda x: calendar.month_abbr[x])
all_sales_month = all_months_data  # 确保使用转换后的数据集,若已有此变量可忽略

# 定义Jan到Dec的正确月份顺序
month_order = list(calendar.month_abbr)[1:]  # 跳过索引0的空字符串

# 按自然月份顺序分组求和,避免字母排序错位
results = all_sales_month.groupby('Month').sum().reindex(month_order)

# 绘制柱状图
plt.bar(range(1, 13), results['Sales'])
# 将X轴数字刻度替换为月份缩写
plt.xticks(range(1, 13), month_order)

# 保留你原有的Y轴格式化逻辑
labels, location = plt.yticks()
plt.yticks(labels, (labels/1000000).astype(int))
plt.ylabel('Sales in million USD')
plt.xlabel('Month')
plt.show()

关键修改说明

  • 用month_order指定月份的自然顺序,通过reindex让groupby结果严格按Jan-Dec排序,解决数据错位问题
  • plt.xticks(range(1,13), month_order)将X轴数字刻度替换为对应的月份缩写
  • 确保all_sales_month是已经转换过月份名称的数据集,否则分组时仍会使用原始数字月份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:07:27