похоже, что position_dodge () не работает с переменными stat_summary () и x с разными группами заполнения - PullRequest
0 голосов
/ 17 апреля 2019

Использование stat_summary(geom = "bar) + stat_summary(geom = "errorbar"), по-видимому, не работает с position_dodge(), в случае значений x с различным числом групп условий.

Я пытаюсь сделать (что должно быть простым) барплотом с ggplot2. У моих данных есть несколько разных выборок (переменная x), и некоторые из этих выборок также имеют переменную fill (condition) («Scr» или «shRNA»), в то время как другие не имеют (condition = NA). Когда я пытаюсь построить эти данные, используя оболочки stat_summary для построения гистограмм с панелями ошибок, функция position_dodge для панелей ошибок работает только для выборок, которые не имеют разных групп заполнения. stat_summary(geom = "barplot") кажется функциональным, потому что отдельные полосы отображаются, но их полосы ошибок не выровнены.

test <- data.frame(Sample = c(rep("A",6),rep("B",3)),
                   Target = c(rep("GENE1",9)),
                   val = c(1.1,1.2,1.15,.5,.6,.7,.95,1,1.05),
                   condition = c(rep("Scr",3),rep("shRNA",3),rep(NA,3)))



g <- ggplot(data=test,aes(x=Sample,y=val,fill=condition)) +
  stat_summary(geom = "bar", fun.y = mean,position = position_dodge2(width=.5,preserve = "single"),color="black",width=.8) +
  stat_summary(geom = "errorbar", fun.data = mean_se, position = position_dodge2(width=.2,preserve = "single"),width=.2) +
  scale_y_continuous(expand = expand_scale(mult = c(0,.2))) +
  #scale_fill_discrete(guide=guide_legend(title="",nrow=2))

Я ожидаю, что аргумент position_dodge() в обоих stat_summary() выровняет строки ошибок по правильной позиции x, независимо от того, имеет ли данный конкретный образец одну или две группы заполнения.

enter image description here

1 Ответ

0 голосов
/ 17 апреля 2019

Я немного озадачен тем, что ты пытаешься сделать.Почему бы не использовать geom_col / geom_bar вместо stat_summary?Я всегда предпочитаю хранить манипулирование данными / суммирование и построение графиков отдельно.

Это то, что я бы сделал

library(tidyverse)
test %>%
    group_by(Sample, condition) %>%
    summarise(val.mean = mean(val), val.sd = sd(val)) %>%
    ggplot(aes(Sample, val.mean, fill = condition)) +
    geom_col(position = position_dodge(width = 0.8)) +
    geom_errorbar(
        aes(ymin = val.mean - val.sd, ymax = val.mean + val.sd),
        position = position_dodge(width = 0.8),
        width = 0.2)

enter image description here

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