两种可能的黑客可供考虑,使用与 Marco Sandri 的答案相同的数据集。
Hack 1。如果你真的不需要它在绘图中工作,只需静态 ggplot 图像:
ggplot(dat, aes(x=cond, y=rating, fill=cond)) +
geom_boxplot() +
geom_boxplot(aes(color = cond),
fatten = NULL, fill = NA, coef = 0, outlier.alpha = 0,
show.legend = F)
这会用一个本质上是外框轮廓的版本覆盖原始箱线图,隐藏中值(fatten = NULL
), 填充颜色 (fill = NA
), 胡须 (coef = 0
) 和异常值 (outlier.alpha = 0
).
然而,它似乎并不能很好地与情节配合。我已经用 ggplot2 的开发版本(按照plotly的推荐)对其进行了测试,但无济于事。请参阅下面的输出:
Hack 2。如果你需要它以情节方式工作:
ggplot(dat %>%
group_by(cond) %>%
mutate(rating.IQR = case_when(rating <= quantile(rating, 0.3) ~ quantile(rating, 0.25),
TRUE ~ quantile(rating, 0.75))),
aes(x=cond, y=rating, fill=cond)) +
geom_boxplot() +
geom_boxplot(aes(color = cond, y = rating.IQR),
fatten = NULL, fill = NA)
(ggplot输出与上面相同)
情节似乎不明白coef = 0
& output.alpha = 0
命令,所以这个 hack 创建了 y 变量的修改版本,使得 P30 以下的所有内容都设置为 P25,而上面的所有内容都设置为 P75。这将创建一个没有异常值、没有胡须的箱线图,并且中位数与箱线上限位于 P75 处。
它比较麻烦,但它可以在情节中工作: