我将从一个MWE开始:
library(ggplot2)
p <- ggplot(mtcars, aes(factor(cyl), mpg, fill = factor(am)))
p + geom_boxplot()
我想修改胡须的颜色,例如,将其设置为红色。我认为不可能直接同时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")
线条范围叠加在一起。接下来尝试:
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))
看起来更好,但现在盒子之间有一个固定的空间(比较第一和第三个图上的cyl = 8)。由于我将使用此代码用于am
的不同级别(当然在我的实际数据中,它不是am
),我事先并不知道这些框本身有多宽是的,因此我无法为width
设置固定的linerange
,而无需为框指定固定的width
。
有没有办法选择性地修改boxplot
的胡须或根据框之间的空间调整linerange
元素之间的空间?
答案 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)