Создание сгруппированной гистограммы в 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

person Philippe D'Onofrio    schedule 15.05.2018    source источник


Ответы (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())

person camille    schedule 15.05.2018
comment
Большое спасибо! Это именно то, что я был после. - person Philippe D'Onofrio; 16.05.2018
comment
Этот ответ невероятен. Спасибо, что поделились своими знаниями!! - person jdcode; 13.05.2021