Добавление баров ошибок в гистограмму ggplot2 после группировки в dplyr - PullRequest
2 голосов
/ 01 апреля 2019

У меня есть следующие данные в R.

oligo  condition  score
REF    Sample     27.827
REF    Sample     24.622
REF    Sample     31.042
REF    Competitor 21.066
REF    Competitor 18.413
REF    Competitor 36.164
ALT    Sample     75.465
ALT    Sample     57.058
ALT    Sample     66.408
ALT    Competitor 35.420
ALT    Competitor 17.652
ALT    Competitor 21.466

Я сделал это и взял средние значения баллов для каждого условия, используя функции group_by и summarise в dplyr.

emsa_test <- emsa_1 %>% 
  group_by(oligo,condition) %>%
  summarise_all(mean)

Создание этой таблицы.

oligo  condition  score
ALT    Competitor 24.84600
ALT    Sample     66.31033
REF    Competitor 25.21433
REF    Sample     27.83033

Затем я построил это с помощью ggplot2.

ggplot(emsa_test, aes(oligo, score)) + 
geom_bar(aes(fill = condition), 
         width = 0.4, position = position_dodge(width=0.5), color = "black", stat="identity", size=.3) +  
theme_bw() +
ggtitle("CEBP\u03b1") +
theme(plot.title = element_text(size = 40, face = "bold", hjust = 0.5)) +
scale_fill_manual(values = c("#d8b365", "#f5f5f5"))

Моя проблема заключается в том, что мне нужно добавить строки ошибок в график.Реализация была бы похожа на это.

geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1, position=pd)

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

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Вы можете рассчитать компоненты на лету с помощью dplyr следующим образом:

library(tidyverse)

df <- read_table(
"oligo  condition  score
REF    Sample     27.827
REF    Sample     24.622
REF    Sample     31.042
REF    Competitor 21.066
REF    Competitor 18.413
REF    Competitor 36.164
ALT    Sample     75.465
ALT    Sample     57.058
ALT    Sample     66.408
ALT    Competitor 35.420
ALT    Competitor 17.652
ALT    Competitor 21.466"
)

df %>%
  group_by(oligo, condition) %>%
  summarise(
    mean = mean(score),
    sd = sd(score),
    n = n(),
    se = sd / n
  ) %>%
  ggplot(aes(x = oligo, y = mean, fill = condition)) +
  geom_col(position = position_dodge()) +
  geom_errorbar(
    aes(ymin = mean - se, ymax = mean + se), 
    position = position_dodge2(padding = 0.5)
  ) +
  labs(
    title = "Mean Score ± 1 SE"
  )

Создано в 2019-04-01 пакетом Представления (v0.2.1)

1 голос
/ 01 апреля 2019

Вы можете суммировать до нескольких значений и сохранять min max и mean:

emsa_test <- emsa_1 %>% 
  group_by(oligo,condition) %>%
  summarise(mean=mean(score),min=min(score),max=max(score))
...