我想在条形图中按年份间隔汇总数据。基于此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")))

但是,只有刻度线会受到影响,但数据不会按时间间隔求和。我是否可以让ggplot2在不对数据进行预处理的情况下对数据求和,同时保持刻度线和标签的原样?
编辑:抱歉,我没说清楚。我希望保持刻度线和标签的原样,即刻度线位于每条线的左侧边缘(现在覆盖了5年),并且标签中只有年份。这是基于上面链接答案的外观。
发布于 2017-11-04 17:59:40
做你想做的事情的方式有点老套:
ggplot(data, aes(cut(year, "5 years"), effect)) +
geom_col() +
xlab("year")

它的实际用途:它绘制多个列(条),高度等于effect,但根据5年间隔标识符堆叠在一起。换句话说,在绘图中,实际上有48个条形,一种颜色,但排列在彼此的顶部。
发布于 2017-11-04 18:28:49
试试这个:
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()它返回:

我更喜欢转换数据集,这样我就不需要使用ggplot2做任何花哨的事情
https://stackoverflow.com/questions/47109047
复制相似问题