在r中每连续n年绘制直方图

时间:2019-03-07 17:03:17

标签: r ggplot2 histogram facet

我有几年的每日降雨数据,例如:

date         value
01/01/1990    1.02
02/01/1990    0.50
03/01/1990    0.00
.........     ...
.........     ...
12/12/2015    10.25

我需要从中连续制作每五年的直方图。即1990年至1995年的直方图,然后是1991年至1996年的等等。我尝试使用ggplot和facet找不到方法。

rf_facet <- inp %>%
  filter(between(rain,1,100))

ggplot(rf_facet, aes(x = rain)) + facet_wrap(~year, nrow = 5) +
  geom_histogram(aes(fill =..count..))

这只能产生一年的地块,我希望每五年一次。

任何帮助将不胜感激。  数据示例为here

1 个答案:

答案 0 :(得分:4)

这是一个使用ggplot2cowplot的示例。我有一个从i年到i+5年的函数。我使用lapply在所有可能的连续5年期间运行此程序。

# Dummy data
df <- data.frame(date = seq(as.Date('01/01/1990', format = "%d/%m/%Y"), 
                      as.Date('31/12/2000', , format = "%d/%m/%Y"), by="day"))
df$value <- runif(nrow(df), 0, 100)

# Load libraries
library(dplyr)
library(cowplot)
library(ggplot2)
library(lubridate)

# Plotting function
plot_rain <- function(i){
  g <- ggplot(df %>% filter(between(year(date), i, i+5)))
  g <- g + geom_histogram(aes(value))
  g <- g + xlab("Rainfall (mm)") + ylab("# of obs")
  g <- g + ggtitle(paste(i, i+5, sep = "-"))
}

# Run for all years
plist <- lapply(min(year(df$date)):(max(year(df$date))-5), plot_rain)

# USe cowplot to plot the list of figure
plot_grid(plotlist = plist, ncol = 2)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

reprex package(v0.2.1)于2019-03-07创建