如何为Python中value_counts生成的柱状图自定义排序顺序
实现自定义排序的柱状图方法
要给柱状图设置完全自定义的排序(不用默认的升/降序、按值或索引排序),有两种直接实用的实现方式:
方法一:将列转为分类类型(永久生效)
先把目标列转换成分类数据类型,并指定你想要的自定义顺序,之后对该列的统计都会遵循这个顺序:
import pandas as pd # 1. 定义你需要的自定义排序顺序,把所有可能的选项按要求列出来 custom_order = ["中立", "同意", "非常同意", "不同意", "非常不同意"] # 2. 将列转换为分类类型,指定顺序并标记为有序 df['perception_survey'] = pd.Categorical(df['perception_survey'], categories=custom_order, ordered=True) # 3. 按自定义顺序统计并绘图,和你原代码逻辑一致 df['perception_survey'].value_counts().plot(kind='bar', title='I feel happy', ylabel='Number of Respondents')
方法二:用reindex重新排序(仅当前统计生效)
如果不想修改原数据的类型,只针对这次的统计结果调整顺序,可以先统计出频次,再用reindex按自定义顺序重新排列:
import pandas as pd # 1. 定义自定义排序顺序 custom_order = ["中立", "同意", "非常同意", "不同意", "非常不同意"] # 2. 先统计频次,再按自定义顺序重新索引 # dropna=False 会保留自定义顺序里所有选项(哪怕原数据里没有,计数为0),不需要的话可以删掉这个参数 counts = df['perception_survey'].value_counts().reindex(custom_order, dropna=False) # 3. 基于重新排序后的结果绘图 counts.plot(kind='bar', title='I feel happy', ylabel='Number of Respondents')
注意点
- 如果自定义顺序里包含原数据中没有的选项,
reindex加dropna=False会在柱状图里显示对应空柱子(计数为0),不需要的话去掉该参数即可。 - 两种方法的核心都是先让统计结果遵循你的自定义顺序,再传入绘图函数。
内容的提问来源于stack exchange,提问作者dimfoo
相关产品推荐
相关产品推荐

