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

使用matplotlib和pandas绘制堆叠柱状图时月份排序异常如何解决

问题原因

你遇到的月份排序错乱问题,本质是Pandas默认将字符串类型的列名按字典序排序展示,而月份名称的字典序和自然时间顺序不匹配,才会出现顺序异常。

解决方法

有两种常用的修复方案,按需选择即可:

方案1:手动重排DataFrame列顺序(简单快捷)

提前定义好正确的月份先后顺序,创建DataFrame后直接按该顺序重排列即可,代码修改量最小:

import pandas as pd
import matplotlib.pyplot as plt

years=["2016","2017","2018","2019","2020", "2021"]
# 先定义按自然时间排序的月份列表,要和dataavail的key完全匹配(注意大小写)
month_order = ["january", "February", "March", "April", "may", "June", "July", "August", "September", "October", "November", "December"]
dataavail={
    "january":[20,0,0,0,10,21],
    "February":[20,13,10,18,15,45],
    "March":[20,20,10,15,18,78],
    "April":[20,20,10,15,18,75],
    "may":[20,20,10,15,18,78],
    "June":[20,20,10,15,18,78],
    "July":[20,20,10,15,18,78],
    "August":[20,20,10,15,18,78],
    "September":[20,20,10,15,18,78],
    "October":[20,20,10,15,18,78],
    "November":[20,20,10,15,18,78],
    "December":[20,20,0,0,0,20],
}

df=pd.DataFrame(dataavail,index=years)
# 按预设的月份顺序重排列
df = df[month_order]

df.plot(kind="bar",stacked=True,figsize=(10,8))
# 注意原代码loc参数拼写错误,应为center不是centre
plt.legend(loc="center",bbox_to_anchor=(0.8,1.0))
plt.show()

方案2:使用有序分类类型固定顺序(适合长期复用)

如果后续还要多次对该月份数据做排序、分组等操作,可以把列名转为Pandas的有序Categorical类型,全局固定顺序:

# 创建df后添加这行代码即可,month_order和方案1里的定义一致
df.columns = pd.Categorical(df.columns, categories=month_order, ordered=True)

后续所有涉及列排序的操作都会自动遵循你定义的月份顺序,不需要每次手动重排。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:08