Создание сгруппированного барплота в ggplot2, показывающего средние значения (которые я не хочу вводить вручную)

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

Мои данные состоят из числовых значений от 100 до 2000, сгруппированных в 3 различные группы лечения наркоманией, которые затем подразделяются на 3 группы (в зависимости от их анатомического расположения в организме, которые называются "Внутренний", "Средний", "Внешний"). Окончательный график должен состоять из 3 групп по 3 столбца (каждая из которых представляет средние значения выживаемости клеток в каждой из 3 локаций). До сих пор мне удавалось делать отдельные барплоты, но я хочу их объединить.

Вот некоторый код, который у меня есть, а ниже - небольшая выдержка из набора данных:

 ggplot(Survival, aes(Treatment, Inner)) +
stat_summary(fun.y = mean,
             geom = "bar",
             position = "dodge")

Treatment   Inner   Middle  Outer
RAD          317    373      354
RAD          323    217      174
RAD          236    255      261
HUTS        1411    1844     1978
HUTS        1922    1756     1856
HUTS        1478    1711     1433
RGD         1433    1489     1633
RGD         1400    1500     1544
RGD         1222    1333     1444

1 ответ

Решение

Вот два варианта: один использует group_by а также summarise от dplyr рассчитать средства, затем трубы в ggplot чтобы сделать уклонение баров. Второй использует stat_summary как ваш пример кода. Оба требуют gatherваши данные в длинном формате.

library(tidyverse)

df %>%
  gather(key = group, value = value, -Treatment) %>%
  group_by(Treatment, group) %>%
  summarise(mean_val = mean(value, na.rm = T)) %>%
  ggplot(aes(x = Treatment, y = mean_val, fill = group)) +
    geom_col(position = position_dodge())

df %>%
  gather(key = group, value = value, -Treatment) %>%
  ggplot(aes(x = Treatment, y = value, fill = group)) +
    stat_summary(fun.y = mean, geom = "col", position = position_dodge())

Другие вопросы по тегам