由于一些无聊的原因,我需要创建一个箱线图,其中中间线是平均值而不是中位数。我已经检查了stackoverflow并找到了添加平均线的示例,但不完全是我需要的。我尝试使用stat_smooth但没有骰子。有什么想法吗?
以下代码:
dust <- c(4.5, 3.7, 5, 5.2, 8.5, 6.6, 4.7, 5, 5.7, 4.3, 2.3, 7.6, 5.2,
6, 8.7, 7.5, 7.7, 11, 9, 6.5, 8.7, 5, 2.2, 7.5, 7.5, 3.5)
wind <- c("Present", "Absent", "Absent", "Absent", "Absent", "Absent",
"Absent", "Absent", "Absent", "Present", "Absent", "Absent",
"Present", "Present", "Absent", "Absent", "Absent", "Absent",
"Absent", "Present", "Absent", "Present", "Absent", "Absent",
"Absent", "Present")
df <- data.frame(dust,wind)
plot <- ggplot(data=df,aes(x=wind,y=dust))+geom_boxplot()+stat_smooth()
plot
答案 0 :(得分:5)
有几种方法可以做到这一点:
最简单的是简单地致电:
plot <- ggplot(data = df, aes(y = dust, x = wind)) +
geom_boxplot(aes(middle = mean(dust))
您还可以利用fatten
中的geom_boxplot()
参数。这控制了中线的厚度。如果我们将其设置为NULL
,则它不会绘制中间线,我们可以使用stat_summary
为平均值插入一行。
plot <- ggplot(data = df, aes(y = dust, x = wind)) +
geom_boxplot(fatten = NULL) +
stat_summary(fun.y = mean, geom = "errorbar", aes(ymax = ..y.., ymin = ..y..),
width = 0.75, size = 1, linetype = "solid")
print(plot)
使用fatten = NULL
正如您所看到的,上面的方法很好,但是当您评估代码时,它会输出一些警告消息,因为fatten
实际上不需要NULL
值。
好处是这种方法可能更灵活一点,因为我们基本上是擦除&#34;中间线并添加我们想要的任何东西。例如,我们也可以选择保持中位数,并将平均值添加为虚线。
答案 1 :(得分:4)
ggplot(df) +
geom_boxplot(
aes(
x = wind, ymin = min(dust), lower = quantile(dust, .25),
middle = mean(dust), upper = quantile(dust, .75),
ymax = max(dust)
), stat = "identity"
)