Change point denoting mean in ggerrorplot to a line

Man*_*ndy 5 r ggplot2 ggpubr

我想将表示平均值的点更改ggerrorplot为一条水平线(类似于在箱线图中用于表示中位数的线)。我希望这条线比误差线稍粗。

我没有在ggerrorplot文档中看到这样做的选项。我是否需要做一些骇客工作,也许还要在外面加线ggerrorplot

情节

# ToothGrowth data set available in R datasets
df <- ToothGrowth

# Examine first 10 rows
head(df, 10)
# len supp dose
# 1   4.2   VC  0.5
# 2  11.5   VC  0.5
# 3   7.3   VC  0.5
# 4   5.8   VC  0.5
# 5   6.4   VC  0.5
# 6  10.0   VC  0.5
# 7  11.2   VC  0.5
# 8  11.2   VC  0.5
# 9   5.2   VC  0.5
# 10  7.0   VC  0.5

require(ggpubr)

# Add mean, jitter points and error bars
ggerrorplot(df, x = "dose", y = "len",
            add = c("mean","jitter"), error.plot= "errorbar")
Run Code Online (Sandbox Code Playgroud)

mar*_*kus 2

添加带有参数的点层shape = 95,如@hrbrmstr所示: /sf/answers/2772110071/

p <- ggerrorplot(df, x = "dose", y = "len", 
            add = "jitter", # 'mean' and c() removed in this line
            error.plot = "errorbar")

p + stat_summary(
    geom = "point",
    shape = 95,
    size = 30,
    col = "red",
    fun.y = "mean")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我删除了添加水平线/条时似乎不需要的点范围层。


如果您需要控制水平线的宽度,这里有一个使用 的选项geom_segment

我们首先计算 y 轴值

df_segment <- aggregate(len ~ dose, p$data, FUN = mean)
Run Code Online (Sandbox Code Playgroud)

然后绘制

p +
  geom_segment(
    data = transform(df_segment, dose = as.numeric(dose)),
    aes(
      x = dose - 0.1,
      xend = dose + 0.1,
      y = len,
      yend = len
    ),
    col = "red",
    size = 1
  )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述