Отображение среднего значения и медианы на двух гистограммах ggplot - PullRequest
2 голосов
/ 10 февраля 2020

Я новый пользователь stackoverflow и в настоящее время не могу комментировать исходное сообщение, чтобы задать вопрос. Я наткнулся на предыдущий ответ stackoverflow ({ ссылка }), и мне было интересно, как вы добавите две вертикальные линии (среднее для группы и медиана группы) здесь на этом графике.

enter image description here

Моя попытка: я не знаю, как добавить в группу переменную "type"

geom_vline(aes(xintercept = mean(diff), ), color="black") + 
geom_vline(aes(xintercept = median(diff), ), color="red") 

Ответы [ 2 ]

4 голосов
/ 10 февраля 2020

Есть несколько разных способов сделать это, но мне нравится создавать отдельный обобщенный фрейм данных и затем передавать его в вызов geom_vline. Это позволяет анализировать результаты и упрощает добавление нескольких строк, которые автоматически сортируются и раскрашиваются по типу:

library(tidyverse) 

df <-
  tibble(
    x = rnorm(40),
    category = rep(c(0, 1), each = 20)
  )

df_stats <-
  df %>% 
  group_by(category) %>% 
  summarize(
    mean = mean(x), 
    median = median(x)
  ) %>% 
  gather(key = key, value = value, mean:median)

df %>% 
  ggplot(aes(x = x)) +
  geom_histogram(bins = 20) +
  facet_wrap(~ category) +
  geom_vline(data = df_stats, aes(xintercept = value, color = key))

enter image description here

1 голос
/ 10 февраля 2020

Самый простой способ - предварительно рассчитать средние и средние значения по группам type. Я сделаю это с aggregate.

agg <- aggregate(diff ~ type, data, function(x) {
  c(mean = mean(x), median = median(x))
})
agg <- cbind(agg[1], agg[[2]])
agg <- reshape2::melt(agg, id.vars = "type")

library(ggplot2)

ggplot(data, aes(x = diff)) +
  geom_histogram() +
  geom_vline(data = agg, mapping = aes(xintercept = value,
                                       color = variable)) +
  facet_grid(~type) +
  theme_bw()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...