Добавление метки подсчета для столбчатой диаграммы gg со статусом = ‘identity’

#r #ggplot2 #label #bar-chart

#r #ggplot2 #метка #гистограмма

Вопрос:

У меня есть GGbarplot geom_bar() со значением x и y и использованием stat = 'identity . Я хочу иметь возможность печатать значение по оси y на графике. Я думаю, это должно быть очень просто, но я не могу понять, почему это не сработает.

график строится с использованием этой простой строки (см. Ниже подмножество набора данных):

  library(tidyverse)
   df %>% ggplot(mapping = aes(x = timeunit, y = pa, group = main_grp )) 
  geom_bar(aes(fill = main_grp),stat = 'identity')
  

Я пытаюсь добавить метки, используя:

 geom_text(aes(label= pa), y=0, stat='identity', colour="white", size=4, vjust = -2)
  

это не сработает, поскольку он просто напечатает все 0 и 1 в наборе данных.

Я пытался использовать

 geom_text(aes(label= group_by(timeunit) %>% summarise (sum = sum(pa), y=0, stat='identity', colour="white", size=4, vjust = -2)
  

чтобы иметь возможность печатать метку за единицу времени, но это также не даст мне желаемого результата.
./
Я также попытался создать простой вектор с суммой всех 1 на единицу времени, в результате чего получился вектор длиной 6 (общее количество единиц времени), но я не могу использовать это для обозначения, потому что его длина отличается от длины набора данных.

Мой вопрос: как я могу напечатать значение оси y в моей гистограмме? Предпочтительно также печатать метки внутри заливки, чтобы показать, сколько подсчетов имеется на подмножество.

dput набора данных подвыборки:

 structure(list(Soort.wetenschappelijk = c("Pastinaca sativa subsp. sativa", 
"Leymus arenarius", "Limonium humile", "Carex acuta", "Silene flos-cuculi", 
"Smyrnium olusatrum", "Stellaria graminea", "Vicia sativa ssp. sativa", 
"Brassica rapa", "Viola curtisii", "Pyrola minor", "Cerastium semidecandrum", 
"Genista tinctoria", "Anthemis cotula", "Juncus gerardii", "Coronopus squamatus", 
"Lonicera periclymenum", "Mentha arvensis", "Aphanes australis", 
"Onopordum acanthium", "Polypodium vulgare", "Hyacinthoides non-scripta", 
"Juncus acutiflorus", "Persicaria hydropiper", "Dactylorhiza majalis subsp. praetermissa", 
"Cerastium diffusum", "Stellaria pallida", "Potamogeton lucens", 
"Scleranthus annuus subsp. polycarpos", "Geum urbanum", "Ceratocapnos claviculata", 
"Dryopteris cristata", "Potamogeton gramineus", "Silene dioica", 
"Dactylorhiza majalis subsp. praetermissa", "Rumex crispus", 
"Gentiana pneumonanthe", "Mespilus germanica", "Huperzia selago", 
"Veronica chamaedrys", "Veronica persica", "Stachys sylvatica", 
"Drosera intermedia", "Puccinellia distans subsp. distans", "Vicia lathyroides", 
"Berula erecta", "Hyacinthoides non-scripta", "Carex acuta", 
"Erica scoparia", "Echinochloa crus-galli"), Oeco.groep = c("5a", 
"3a", "3c", "4c", "5b", "8b", "5a", "5a", "1e", "6b", "9e", "6b", 
"7e", "1e", "3c", "1d", "9e", "2a", "1c", "1f", "9e", "9c", "5b", 
"2b", "5b", "3a", "8b", "4a", "1c", "8b", "9e", "7a", "4b", "8b", 
"5b", "2a", "7d", "8d", "7e", "5a", "1a", "9b", "7d", "3b", "6b", 
"4c", "9c", "4c", "7e", "1c"), time_unit = c("X1940.x", "X1900.x", 
"X1975.x", "X1900.x", "X1993.x", "X1993.x", "X1993.x", "X1940.x", 
"X2001.x", "X1920.x", "X1993.x", "X1975.x", "X1993.x", "X1920.x", 
"X2001.x", "X1920.x", "X1900.x", "X1993.x", "X1993.x", "X1993.x", 
"X1993.x", "X2001.x", "X2001.x", "X2001.x", "X2001.x", "X2001.x", 
"X1975.x", "X1940.x", "X1993.x", "X1993.x", "X1940.x", "X1993.x", 
"X1975.x", "X1993.x", "X1940.x", "X1900.x", "X2001.x", "X1940.x", 
"X1993.x", "X1900.x", "X2001.x", "X1940.x", "X1920.x", "X1940.x", 
"X1920.x", "X1993.x", "X1900.x", "X1993.x", "X2001.x", "X1993.x"
), pa = c(1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 
0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0), timeunit = c("1940", "1900", 
"1975", "1900", "1993", "1993", "1993", "1940", "2001", "1920", 
"1993", "1975", "1993", "1920", "2001", "1920", "1900", "1993", 
"1993", "1993", "1993", "2001", "2001", "2001", "2001", "2001", 
"1975", "1940", "1993", "1993", "1940", "1993", "1975", "1993", 
"1940", "1900", "2001", "1940", "1993", "1900", "2001", "1940", 
"1920", "1940", "1920", "1993", "1900", "1993", "2001", "1993"
), main_grp = c("5", "3", "3", "4", "5", "8", "5", "5", "1", 
"6", "9", "6", "7", "1", "3", "1", "9", "2", "1", "1", "9", "9", 
"5", "2", "5", "3", "8", "4", "1", "8", "9", "7", "4", "8", "5", 
"2", "7", "8", "7", "5", "1", "9", "7", "3", "6", "4", "9", "4", 
"7", "1")), row.names = c(NA, -50L), class = c("tbl_df", "tbl", 
"data.frame"))
  

Ответ №1:

Возможно, попробуйте создать метки в другом фрейме данных:

 library(tidyverse)
#Labels
labs <- df %>% group_by(timeunit) %>%
  summarise(N=sum(pa)) %>% mutate(main_grp=NA)
#Plot
df %>%
  ggplot(mapping = aes(x = timeunit, y = pa, group = main_grp)) 
  geom_bar(aes(fill = main_grp),stat = 'identity') 
  geom_text(data=labs,aes(label=N,y=N),vjust=-0.5)
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Спасибо, Дак, это работает. Я допустил ошибку, не добавив список NA для заполнения в своих собственных попытках. Отлично!

2. @Stevestingray Отлично! Это тоже фантастический вопрос 1