如何调整Pandas条形图(bar plot)中分类变量的条形顺序?
调整分类变量条形图的顺序
这个问题我之前也碰到过!默认情况下value_counts()是按计数从高到低排序的,所以绘图时条形就跟着这个顺序走了。要调整成你想要的自定义顺序,有几种简单的方法:
方法1:将变量转为有序分类(推荐,适合长期固定顺序)
如果后续分析也需要保持这个分类顺序,可以先把CatVar转换成有序分类变量,指定你想要的顺序。这样不管是value_counts()还是绘图,都会遵循这个顺序:
import pandas as pd # 注意要和你数据里的取值大小写完全一致(比如你的数据是"Medium"首字母大写) df['CatVar'] = pd.Categorical(df['CatVar'], categories=['Low', 'Medium', 'High'], ordered=True) # 再绘图就会按指定顺序展示了 df.CatVar.value_counts().plot(kind="bar")
方法2:临时重排计数结果(不修改原数据)
如果不想改动原数据集,只是临时调整绘图顺序,可以用reindex()方法按自定义顺序重新排列value_counts()的结果:
# 定义你想要的条形顺序 desired_order = ['Low', 'Medium', 'High'] # 按顺序提取计数,缺失的类别会显示为0(如果有的话) sorted_counts = df.CatVar.value_counts().reindex(desired_order) # 绘制条形图 sorted_counts.plot(kind="bar")
方法3:手动指定matplotlib的x轴顺序
如果你直接用matplotlib绘图,也可以手动设置条形的位置和标签:
import matplotlib.pyplot as plt counts = df.CatVar.value_counts() desired_order = ['Low', 'Medium', 'High'] # 按顺序提取对应的计数和标签 sorted_counts = [counts[cat] for cat in desired_order] plt.bar(desired_order, sorted_counts) plt.show()
需要注意的是:所有方法里的类别名称要和你数据中的取值大小写、拼写完全一致,不然会出现计数为0或者不匹配的情况~
内容的提问来源于stack exchange,提问作者ViggoTW
相关产品推荐
相关产品推荐

