在条形图内按年间隔汇总数据

时间:2017-11-04 08:51:52

标签: r ggplot2 geom-bar

我想在条形图内按年间隔汇总数据。基于此answer,我编写了以下代码:

years <- seq(as.Date('1970/01/01'), Sys.Date(), by="year")
set.seed(111)
effect <- sample(1:100,length(years),replace=T) 
data <- data.frame(year=years, effect=effect)
ggplot(data, aes(year, effect)) + geom_bar(stat="identity", aes(group=cut(year, "5 years")))

enter image description here 但是,只有刻度线会受影响,但数据不会按间隔求和。我可以让ggplot2在不预处理数据的情况下对数据求和,同时保持刻度线和标签不变吗?

编辑:对不起,我不清楚。我希望将刻度线和标签保持原样,即位于每个条的左边缘(现在覆盖5年)的刻度线和仅在标签中的年份。这是基于上面链接答案的外观。

2 个答案:

答案 0 :(得分:0)

做你想做的事的有点hacky方式:

ggplot(data, aes(cut(year, "5 years"), effect)) +
  geom_col() +
  xlab("year")

enter image description here

它实际上做了什么:它绘制了高度等于effect的多个列(条),但是基于5年间隔标识符堆叠在彼此之上。换句话说,在情节上,实际上有48个条形,一种颜色但位于彼此之上。

答案 1 :(得分:0)

试试这个:

library(tidyverse)

df %>% 
  mutate(index = ceiling(seq_along(years) / 5)) %>% 
  group_by(index) %>% 
  mutate(sum_effect = sum(effect)) %>% 
  distinct(sum_effect, .keep_all = TRUE) %>% 
  ggplot(aes(year, sum_effect)) +
  geom_col()

返回:

enter image description here

我更喜欢转换数据集,以便我不必对ggplot2

做任何奇特的事情