如何更改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_order
,row_order
仅在您指定row
参数时有效,并将每个条形图输出到自己的图形中以上是关于如何更改seaborn中因子图的顺序的主要内容,如果未能解决你的问题,请参考以下文章