我试图先按
am
然后按mpg
重新排序情节。附在 R 中使用 ggplot2 的结果中。
我试图使用siuba和plotnine获得相同的结果。下面是我到目前为止的代码。
(
mtcars
>> arrange(_.am, _.mpg)
>> mutate(model = fct_reorder(_.model, _.am))
>> ggplot(aes(y="mpg", x="model", fill='factor(am)'))
+ geom_col()
+ labs(fill = "Automatic/Manual Transmission")
+ coord_flip()
)
更新
由于我原来的答案不再在这里工作,所以更新版本使用现在可用的
fct_inorder
,但最重要的是在重新arrange
数据之后和通过fct_inorder
设置顺序之前重置索引。在我发布原始答案时,这一步是不必要的,实际上对我来说看起来像是一个错误。
from plotnine import *
from siuba import _, arrange, mutate
from siuba.dply.forcats import fct_inorder
mtcars1 = (
mtcars
>> arrange(-_.am, _.mpg)
).reset_index()
(
mtcars1
>> mutate(name = fct_inorder(_.name))
>> ggplot(aes(y="mpg", x="name", fill='factor(am)'))
+ geom_col()
+ labs(fill = "Automatic/Manual Transmission")
+ coord_flip()
)
原答案
如果我应该在 R 中复制你的情节,我会使用
dplyr::arrange
+ forcats::fct_inorder
。由于 siuba
不提供与 fct_inorder
等效的功能,您可以通过首先按所需顺序排列、添加行号索引列并按此索引列重新排序来实现所需结果:
from plotnine import *
from siuba import _, arrange, mutate
from siuba.dply.forcats import fct_reorder
(
mtcars
>> arrange(-_.am, _.mpg)
>> mutate(model = fct_reorder(_.model, _.reset_index().index))
>> ggplot(aes(y="mpg", x="model", fill='factor(am)'))
+ geom_col()
+ labs(fill = "Automatic/Manual Transmission")
+ coord_flip()
)