29

这个问题来自另一个问题。我无法在那里实现答案。

定义:

df2 <- data.frame(variable=rep(c("vnu.shr","vph.shr"),each=10),
        value=seq(1:20))

阴谋:

require(ggplot2)
qplot(variable,value, data=df2,geom="boxplot")+
geom_jitter(position=position_jitter(w=0.1,h=0.1))

我想以相反的顺序排列箱线图(例如,一个在右边的左边等等)。

我尝试了各种使用levels, ordered,relevel等对因子重新排序的方法rev,但我似乎根本无法获得正确的语法。

4

2 回答 2

57

你有没有试过这个:

df2$variable <- factor(df2$variable,
    levels = c('vph.shr','vnu.shr'),ordered = TRUE)

我刚刚在那里选择了一个订单,因为我的系统配置与我怀疑的你的略有不同,所以我的“默认排序”可能会有所不同。但是您可以在指定级别时切换级别的位置。

其他一些选择,取决于您的口味:

仅反转当前顺序:

factor(df2$variable,levels = rev(levels(df2$variable)),ordered = TRUE)

或者,如果您不想手动输入每个级别,则可以使用子集来指定特定的顺序:

factor(df2$variable,levels = levels(df2$variable)[1:2],ordered = TRUE)
于 2011-07-29T00:36:51.220 回答
9

您已经接受了一个(非常好的)解决方案,但这是另一个使用relevel(). 我不知道为什么它不适合你?

#default plot
ggplot(df2, aes(variable, value)) + geom_boxplot()

在此处输入图像描述

#Reverse reverse!
df2$variable2 <- with(df2, relevel(variable, "vph.shr"))
ggplot(df2, aes(variable2, value)) + geom_boxplot()

在此处输入图像描述

于 2011-07-29T01:12:00.700 回答