使用ggplot2时如何更改箱线图的顺序?

Posted

技术标签:

【中文标题】使用ggplot2时如何更改箱线图的顺序?【英文标题】:How to change order of boxplots when using ggplot2? 【发布时间】:2011-10-15 14:15:12 【问题描述】:

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

定义:

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

我希望箱线图以相反的顺序排列(例如,一个在右边,一个在左边,依此类推)。

我尝试过使用levelsorderedrelevelrev 等对因子重新排序的各种方法,但我似乎无法正确使用语法。

【问题讨论】:

这已在 SO 上处理过多次。这里只是两个***示例:***.com/questions/3253641/…***.com/questions/5967593/ordering-of-bars-in-ggplot @Roman Luštrik 这也许可以说明重新排序因素对初学者来说是多么令人困惑。一方面,我曾尝试对数据框进行排序,使因子按字母倒序排列,然后将其重新编码为因子。这对于因子z=c("b","a") 不起作用,R 应用的基础数字遵循字母顺序(这是有道理的) s.t.数字编码是z=c(2,1)。但是,现在我知道,重新排序一个因子与重新排序数据框无关!在重新排序因子时,我们不会重新排序数据,而是将基础数字更改为 z=c(1,2) 说。 出于绘图目的,定义图中排序的因素是水平的顺序。一旦你得到它在你的皮肤下,这是一个平稳的旅程。关于重新排序的困惑......您是否尝试过将格子/ggplot 图输出到 pdf? :) 男孩,在您意识到这不是您的代码而是缺少print 语句之前... @Roman Luštrik Re. PDF 你可能想检查ggsavehere 【参考方案1】:

你试过了吗:

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)

【讨论】:

我过去曾使用过您的解决方案并且它有效,但我现在在小提琴+箱线图上使用它(已经测试了以上所有内容)并且它不想改变。有什么想法吗?【参考方案2】:

您已经接受了一个(非常好的)解决方案,但这里有另一个使用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()

【讨论】:

图片怎么了?您在哪里使用 Commodore 64 或其他 1980 年代设备? ;-) @Fred - 我在 microsoft paint 中手工绘制了它们,看起来像 ggplot 设备的输出。实际上,我将图像保存为小 jpeg (2 x 2),这样它们就不会分散注意力……但是无论 SO 托管图像的地方,它对图片应该有多大都有自己的想法…… 我喜欢evil pixel 美学。很高兴知道如何复制它。

以上是关于使用ggplot2时如何更改箱线图的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ggplot2显示箱线图中的所有平均值? [复制]

ggplot2 按第 80 个百分位重新排列我的箱线图

箱线图(ggplot2)未按预期工作

Fig4-a ggplot2绘制箱线图叠加散点图2020-12-14

使用 ggplot2 组合箱线图和直方图

用一条线连接箱线图(ggplot2)