如何在ggplot2中修改boxplot的胡须?

时间:2014-02-27 12:39:01

标签: r ggplot2 boxplot

我将从一个MWE开始:

library(ggplot2)

p <- ggplot(mtcars, aes(factor(cyl), mpg, fill = factor(am)))
p + geom_boxplot()

enter image description here

我想修改胡须的颜色,例如,将其设置为红色。我认为不可能直接同时geom_boxplot执行此操作,所以这是我的解决方法:

library(Hmisc)

stat_sum_df <- function(fun, geom = "crossbar", ...) {
  stat_summary(fun.data = fun, geom = geom, width = 0.4, ...)
}

p + stat_boxplot(geom = 'linerange', colour = "red", position = "dodge) +
    stat_sum_df("median_hilow", conf.int = 0.5, position = "dodge") 

enter image description here

线条范围叠加在一起。接下来尝试:

p + stat_boxplot(geom = 'linerange', colour = "red", position = position_dodge(width = .5)) +
   stat_sum_df("median_hilow",conf.int=0.5, position = position_dodge(width = .5))

enter image description here

看起来更好,但现在盒子之间有一个固定的空间(比较第一和第三个图上的cyl = 8)。由于我将使用此代码用于am的不同级别(当然在我的实际数据中,它不是am),我事先并不知道这些框本身有多宽是的,因此我无法为width设置固定的linerange,而无需为框指定固定的width

有没有办法选择性地修改boxplot的胡须或根据框之间的空间调整linerange元素之间的空间?

2 个答案:

答案 0 :(得分:8)

如何将两个箱图绘制在一起。一个有红色线条,另一个有红色线条,没有任何信号。

p + geom_boxplot(color="red") + geom_boxplot(aes(ymin=..lower.., ymax=..upper..)) 

答案 1 :(得分:6)

另一种选择是绘制误差线,并在其上面绘制没有胡须的箱线图:

library(ggplot2)
p + stat_boxplot(geom = "errorbar", colour = "red") + 
  geom_boxplot(coef = 0, outlier.size = 0)

enter image description here