我想根据日期范围填充不同颜色的直方图。在下面的示例中,整个直方图为橙色。让我们说我想填写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..
,但我没有幸运能够使用日期。有什么想法吗?
答案 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")