Как обозначить минимальные и максимальные значения для каждой группы в ggplot?

#r #ggplot2 #dplyr

#r #ggplot2 #dplyr

Вопрос:

У меня есть набор данных, который подсчитывает количество сообщений в месяц в год. Выглядит примерно так:

    monthdate   year     n
   <date>     <dbl> <int>
 1 2020-01-01  2001   133
 2 2020-01-01  2002   129
 3 2020-01-01  2003   149
 4 2020-01-01  2004    96
 5 2020-01-01  2005    94
 6 2020-01-01  2006   109
 7 2020-01-01  2007   158
 8 2020-01-01  2008   138
 9 2020-01-01  2009    83
 

( monthdate поскольку дата необходима только для отображения названий месяцев в ggplot).

Таким образом, результирующий график генерируется следующим образом:

 
posts %>% mutate(monthdate = as.Date(paste("2020", month, '01', sep = "-"))) %>%
  group_by(monthdate, year) %>% summarise(n = n()) %>%
  ggplot(aes(x = monthdate, y = n))  
  geom_point(, stat = 'identity')  
  geom_smooth(method = "loess")  
  scale_x_date(date_breaks = "1 month", date_labels = "%b") 

 

и выглядит вот так:

участок в месяц

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

Ответ №1:

Хорошо, я нашел решение. Довольно просто:

 
posts %>% mutate(monthdate = as.Date(paste("2020", month, '01', sep = "-"))) %>%
  group_by(monthdate, year) %>% summarise(n = n()) %>% group_by(monthdate) %>% mutate(lab=case_when(n==max(n)|n==min(n)~year))%>%
  ggplot(aes(x = monthdate, y = n))  
  geom_point(, stat = 'identity')  
  geom_smooth(method = "loess")  
  scale_x_date(date_breaks = "1 month", date_labels = "%b")  
  xlab('Month') 
  ylab('Number of posts')  geom_text(aes(label=lab))


 

и результирующий сюжет выглядит так:
результирующий график