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

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

Мои данные состоят из числовых значений от 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 Ответ

0 голосов
/ 15 мая 2018

Вот два варианта: один использует 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())

...