Добавьте количество наблюдений на группу в барплоте (ggplot2) - PullRequest
2 голосов
/ 28 февраля 2020

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

Я хочу добавить количество наблюдений (в столбце «Данные») в верхней части каждого столбца графика. Тем не менее, похоже, что я не делаю это правильно, потому что он принимает значение для каждой части столбца.

Кто-нибудь знает, как это решить? Большое спасибо!

Код для графика

Euk_one %>% 
  drop_na(`Length Stretch`) %>%
  mutate_at(c("GGA","GGG","GGT","GGC"),~.x/`Length Stretch`) %>% 
  group_by(interval) %>% select(c(interval, "GGA","GGG","GGT","GGC", Obs))%>%
  summarize_all(mean) %>%pivot_longer(-c(interval, Obs)) %>%
  ggplot(aes(x=interval, y=value, fill=name)) + geom_col() +
  ggtitle("Eukarya 1 Codon Stretches - Distribution of codons ")+
  labs(fill= "Codons") +
  theme(axis.text.x = element_text(angle = 45)) + geom_text(aes(label=Obs), vjust = -.25)

Пример данных

structure(list(interval = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("[6,7]", 
"(7,8]", "(8,9]", "(9,10]"), class = "factor"), `Length Stretch` = c(8, 
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 
10, 10, 10, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 7, 
7, 6, 6, 7, 6, 6, 7, 7, 7, 6), GGA = c(0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 7, 0, 6, 0, 0, 0, 0, 0, 7, 6, 6, 0, 0, 0, 
0), GGG = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), GGT = c(8, 8, 8, 8, 8, 
8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 
6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 0, 6, 0, 6, 7, 7, 6, 6, 0, 
0, 0, 7, 7, 7, 6), GGC = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), `Length Gene` = c(5250, 
5250, 3021, 1905, 2910, 2973, 2367, 3021, 2931, 2754, 2424, 2862, 
2436, 5061, 4935, 23949, 23988, 24024, 2733, 2733, 2358, 2358, 
2733, 2733, 2838, 2079, 2100, 1998, 2835, 1197, 1197, 2838, 1998, 
3795, 3795, 3795, 1320, 1827, 2088, 663, 10395, 10545, 2340, 
2340, 1323, 1977, 2085, 4773, 10557, 10554, 1920), NumGens = c(19297, 
19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 
19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 
19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 
19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 
19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 19297, 
19297, 19297, 19297, 19297, 19297), Count = c(1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1), Obs = c(13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 
13L, 13L, 13L, 13L, 13L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 
6L, 6L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 
27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 
27L, 27L, 27L)), class = "data.frame", row.names = c(NA, -51L
))

Пример сюжета

enter image description here

1 Ответ

2 голосов
/ 28 февраля 2020

Поскольку у вас есть только одно значение для отображения в качестве метки за интервал, вы можете отфильтровать ваш фрейм данных с помощью функции distinct из dplyr и установить одно значение y для его построения:

library(tidyverse)
Euk_one %>% 
  drop_na(`Length Stretch`) %>%
  mutate_at(c("GGA","GGG","GGT","GGC"),~.x/`Length Stretch`) %>% 
  group_by(interval) %>% dplyr::select(c(interval, "GGA","GGG","GGT","GGC", Obs))%>%
  summarize_all(mean) %>%pivot_longer(-c(interval, Obs)) %>%
  ggplot(aes(x=interval, y=value, fill=name)) + geom_col() +
  ggtitle("Eukarya 1 Codon Stretches - Distribution of codons ")+
  labs(fill= "Codons") +
  theme(axis.text.x = element_text(angle = 45)) + 
  geom_text(inherit.aes = FALSE, data = . %>% distinct(interval, Obs), 
            aes(x = interval, y = 0.25, label=Obs))

enter image description here

Это отвечает на ваш вопрос?

...