#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))