如何在seaborn中更改因子图的顺序

24 投票
3 回答
37728 浏览
提问于 2025-04-18 12:24

我的数据看起来是这样的:

m=pd.DataFrame({'model':['1','1','2','2','13','13'],'rate':randn(6)},index=['0', '0','1','1','2','2'])

我想让图表的x轴按照[1,2,13]的顺序排列,但默认的顺序是[1,13,2]。

有没有人知道怎么改变这个顺序?

更新: 我想我已经找到了一个方法来解决这个问题,但也许还有更好的方法可以通过使用索引来实现?

sns.factorplot('model','rate',data=m,kind="bar",x_order=['1','2','13'])

3 个回答

1

正如 @Pablo 在评论中提到的,以及 @Archie 在他们的回答中正确指出的:

x_order 应该替换成 order

如果你是来找 排序 解决方案的,特别是针对 kind="count" 的情况,实际上是可以做到的:

sns.catplot(x="model", data=m, kind="count", order=m.model.value_counts().index)

这是因为默认情况下,value_counts 方法会返回按数量降序排列的值。

3

根据文档,seaborn的接口又更新了,参数x_order应该用order来替代:

sns.factorplot('model', 'rate', data=m, kind="bar", order=['1','2','13'])

另外,factorplot这个函数已经改名了,并且在未来的版本中会被移除;它现在用catplot来代替:

sns.catplot('model', 'rate', data=m, kind="bar", order=['1','2','13'])
26

你对帖子所做的更新展示了正确的做法,也就是说,你应该把一组 x 值按你想要的顺序传给 order。对于数字数据,默认是按排序后的顺序来绘图,所以如果你有数字值,最好把它们保持为整数或浮点数,而不是字符串,这样它们就会以“自然”的顺序排列。

撰写回答