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

Posted

技术标签:

【中文标题】如何更改seaborn中因子图的顺序【英文标题】:how to change the order of factor plot in seaborn 【发布时间】:2014-08-28 10:10:04 【问题描述】:

我的数据如下所示:

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'])

【问题讨论】:

我无法在 OS X 上使用 Python 2.7.6 进行复制,我得到了您想要的顺序。 使用 x_order 关键字参数。 @Ffisegydd,很可能是:import seaborn as sb; sb.factorplot('model', 'rate', data=m)。我也得到了[1, 2, 13] 的OP 预期顺序。 我发现了我的问题。因为我将模型的类型更改为字符串,这就是为什么 11 会早于 2 出现。非常感谢您的帮助!!! :) 但其实我还是对x_order很好奇,是不是必须要指定索引才能做到呢? 您好 mwaskom 非常感谢您的帮助!我以这种方式想通了,请查看更新,但我仍然很好奇使用索引来做到这一点的方式。谢谢! 【参考方案1】:

您对帖子的更新显示了正确的方法,即您应该按照您希望它们绘制的顺序将x 值列表传递给order。数值数据的默认值是按排序顺序绘制的,因此如果您有数值,最好将它们保留为整数或浮点数而不是字符串,这样它们将按“自然”顺序排列。

【讨论】:

x_order 参数已重命名为 order【参考方案2】:

正如@Pablo 在他的评论中所写,@Archie 在他们的回答中正确提到:

x_order 应替换为 order

对于那些来这里寻找kind="count"排序解决方案的人,可以这样做:

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

这是因为默认情况下value_counts 方法将返回按计数降序排序的值。

【讨论】:

【参考方案3】:

从documentation看来,seaborn API又更新了,参数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'])

【讨论】:

不,是order 而不是row_orderrow_order 仅在您指定row 参数时有效,并将每个条形图输出到自己的图形中

以上是关于如何更改seaborn中因子图的顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何反转 seaborn 图形级别图的轴(FacetGrid)

多个重叠图的 Seaborn 图例修改

如何将时间用作带有seaborn的散点图的x轴?

使用数据框中的列为 seaborn 图的背景着色

如何在 Seaborn 图中设置色调顺序

如何在seaborn的stripplot图例中更改标记