简体   繁体   English

label ggplot中每组的最小值和最大值如何?

[英]How label min and max values per group in ggplot?

I have a dataset that counts number of posts per month per year.我有一个数据集,可以计算每年每月的帖子数。 Looks like that:看起来像这样:

   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 as a date is needed only for rendering month names in ggplot). (仅在 ggplot 中呈现月份名称时才需要将monthdate作为日期)。

So the resulting plot is generated like that:所以生成的 plot 是这样生成的:


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

and looks like that:看起来像这样:

每月情节

I want to give year labels for topmost and bottom most outliers, so for each month it can be seen which year produced the least and the most posts per month.我想为最顶部和最底部的异常值提供年份标签,因此每个月都可以看到哪个年份每月产生的帖子最少和最多。 What is the efficient way to do it?什么是有效的方法?

Ok, I found the solution.好的,我找到了解决方案。 Pretty simple:很简单:


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


and the resulting plot is:结果 plot 是: 结果图

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM