根据日期范围填充直方图

时间:2014-10-09 02:14:37

标签: r ggplot2

我想根据日期范围填充不同颜色的直方图。在下面的示例中,整个直方图为橙色。让我们说我想填写2012-03-01到2012-04-28的不同颜色,并保持其余的橙色。

library(ggplot2)
library(lubridate)
# random dates
# https://stackoverflow.com/questions/14720983/efficiently-generate-a-random-sample-of-times-and-dates-between-two-dates
randdate <- function(N, st="2012/01/01", et="2012/12/31") {
              st <- as.POSIXct(as.Date(st))
              et <- as.POSIXct(as.Date(et))
              dt <- as.numeric(difftime(et,st,unit="sec"))
              ev <- sort(runif(N, 0, dt))
              rt <- st + ev
            }
set.seed(42)
dat <- data.frame(y=sample(c(0:50), 1000, replace=TRUE),
                  date=randdate(1000))
dat$date <- ymd(substr(dat$date, 1, 10))

ggplot(dat,
       aes(x=date)) +
       geom_histogram(binwidth=400000, 
                      fill="#E69F00", 
                      colour="#E69F00") +
       scale_x_datetime(labels=date_format("%m-%Y"),
                        breaks=date_breaks("1 year"))

Hadley的回答here建议fill=..x..,但我没有幸运能够使用日期。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您只是扩展cut功能中附带的示例Hadley,您将获得所需的内容。

ggplot(dat,
   aes(x=date, 
       fill=cut(..x.., 
       breaks=c(min(..x..), as.POSIXct("2012-03-01"), as.POSIXct("2012-04-28"), max(..x..)),
       labels=c("before","during","after"), include.lowest=TRUE)
   )) +
   geom_histogram(binwidth=400000) +
   scale_x_datetime(labels=date_format("%m-%Y"),
                    breaks=date_breaks("1 year")) +
   scale_fill_discrete(name="Range")

enter image description here