Seaborn barplot为何不保留groupby索引排序后的顺序?
原因及解决方法
原因
Seaborn的barplot函数默认会将x轴的数值型分类变量按自然数值顺序排序,即使你已经对groupby后的结果做了排序,它也会忽略现有顺序,自动对x轴的数值型索引重新排序。这里你的ID是数值类型,所以barplot会默认按1→2→3的顺序展示柱状图。
解决方法
提供三种可行的解决方式:
- 方法一:将索引转为字符串类型
把数值型索引转换成字符串,Seaborn会将其当作非数值分类变量,从而保留排序后的顺序:
grouped.index = grouped.index.astype(str) sns.barplot(x=grouped.index, y=grouped['value'])
- 方法二:使用
order参数指定顺序
直接通过order参数传入排序后的索引,强制指定柱状图的展示顺序:
sns.barplot(x=grouped.index, y=grouped['value'], order=grouped.index)
- 方法三:重置索引,将ID转为列
把groupby后的索引重置为普通列,这样直接使用排序后的DataFrame列数据,barplot会遵循DataFrame的行顺序:
grouped = grouped.reset_index() sns.barplot(x='ID', y='value', data=grouped)
内容的提问来源于stack exchange,提问作者NaiveBae
相关产品推荐
相关产品推荐

