Поменяйте точку, обозначающую среднее в ggerrorplot, на линию - PullRequest
5 голосов
/ 11 июня 2019

Я бы хотел изменить точку, обозначающую среднее значение в ggerrorplot, на горизонтальную линию (аналогичную линии, используемой для обозначения медианы в блокпосте). Мне бы хотелось, чтобы эта строка была немного толще, чем столбцы ошибок.

Я не вижу возможности сделать это в документации ggerrorplot. Нужно ли мне взломать и, возможно, наложить строку за пределы ggerrorplot?

plot

# 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")

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Добавить точечный слой с аргументом shape = 95, как показано здесь @hrbrmstr: https://stackoverflow.com/a/39601572/8583393

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")

enter image description here

Я удалил диапазон точекслой, который, по-видимому, не нужен при добавлении горизонтальных линий / полос.


Если вам нужен контроль ширины горизонтальных линий, здесь есть опция, которая использует geom_segment.

Сначала вычисляем значения по оси Y

df_segment <- aggregate(len ~ dose, p$data, FUN = mean)

Затем строим график

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
  )

enter image description here

1 голос
/ 12 июня 2019

Мое хакерское решение - получить объект mean от ggplot_build, а затем использовать geom_line, чтобы добавить желаемую линию на график:

df <- ToothGrowth

require(ggplot2)
require(ggpubr)

g <- ggerrorplot(df, x = "dose", y = "len",
                     add = "jitter", error.plot= "errorbar")

gb <- ggplot_build(g)

g + geom_line(data=data.frame(xavg=c(t(gb$data[[2]][,c("xmin","xmax")])),
                              yavg=rep(gb$data[[2]]$y, each=2),
                              grps=rep(row.names(gb$data[[2]]),each=2)),
              aes(x = xavg, y = yavg, group=grps), size=1) 

Создано в 2019-06-11 пакетом Представление (v0.3.0)

...