Как добавить среднее значение данных в виде горизонтальной линии на граненой графике в r ggplot2 [duplicate]

Могу ли я добавить, что если у вас нет% слева, ваши изображения будут либо продолжены, либо они будут использовать левый промежуток «между» краями исходного изображения. Это не было указано выше и очень сбивало с толку.

3
задан PoGibas 20 September 2017 в 18:00
поделиться

2 ответа

Минимальный пример с использованием mtcars - вам нужно создать кадр данных со средним значением для каждого gear (в вашем случае это Name).

library(tidyverse)
dMean <- mtcars %>%
    group_by(gear) %>%
    summarise(MN = mean(cyl))
ggplot(mtcars) +
    geom_point(aes(mpg, cyl)) +
    geom_hline(data = dMean, aes(yintercept = MN)) +
    facet_wrap(~ gear)

Для вас это должно работать :

library(tidyverse)
dMean <- UKWinners %>%
    group_by(Name) %>%
    summarise(MN = mean(TE.Contr.))
ggplot(UKWinners) +
    geom_point(aes(Pcode, TE.Contr.)) +
    geom_hline(data = dMean, aes(yintercept = MN)) +
    facet_wrap(~ Name)
5
ответ дан PoGibas 17 August 2018 в 12:10
поделиться

Вы также можете создать свой собственный стат, чтобы рассчитать линию для вас. Адаптация примера из расширенного руководства ggplot2 Вы можете сделать

StatMeanLine <- ggproto("StatMeanLine", Stat,
  compute_group = function(data, scales) {
    transform(data, yintercept=mean(y))
  },
  required_aes = c("x", "y")
)

stat_mean_line <- function(mapping = NULL, data = NULL, geom = "hline",
                       position = "identity", na.rm = FALSE, show.legend = NA, 
                       inherit.aes = TRUE, ...) {
  layer(
    stat = StatMeanLine, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

. Тогда вы можете использовать его как

ggplot(mtcars, aes(mpg, cyl)) +
  stat_mean_line(color="red") +
  geom_point() +
  facet_wrap(~ gear)

1
ответ дан MrFlick 17 August 2018 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: