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
相关产品推荐
相关产品推荐

