#r
#r
Вопрос:
Использование 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()
‘s выровняет полосы ошибок в правильном x
положении, независимо от того, имеет ли этот конкретный образец одну или две группы заливки.
Ответ №1:
Я немного смущен тем, что вы пытаетесь сделать. Почему бы не использовать 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)
Комментарии:
1. Это действительно работает, и после того, как я повозился с моим исходным кодом, похоже, что проблема на самом деле связана с использованием «position_dodge2 ()» вместо исходного «position_dodge ()». Использование оригинальной функции «position_dodge ()» работает даже с функцией stat_summary (). Спасибо!