我正在尝试根据相同的切割将previous answer on filling a histogram based on date cuts扩展为着色点。
library(ggplot2)
library(lubridate)
library(scales)
# 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, y=y,
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_point() +
scale_x_datetime(labels=date_format("%m-%Y"),
breaks=date_breaks("1 year")) +
scale_fill_manual(values=c("#E69F00", "#56B4E9", "#009E73"))
也是基于this answer的尝试,但减少&#34;削减&#34;。
ggplot(dat) +
geom_point(aes(x=date, y=y,
colour=x > as.POSIXct("2012-03-01"))) +
geom_line(colour="#999999", size=1) +
scale_colour_manual(values=c("#56B4E9", "#009E73")) +
ylab("Count") +
theme_bw() +
theme(axis.title.x = element_blank(),
panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line = element_line(color = 'black'),
title=element_text(size=9, face="bold"),
legend.position="none")
答案 0 :(得分:1)
首先,geom_point
使用color
美学,而非fill
。接下来,我发现(对我而言)将分解的颜色分配给数据帧与尝试使ggplot
调用更复杂更为有意义:
dat$col <- "during"
dat$col <- ifelse(dat$date < as.POSIXct("2012-03-01"), "before", dat$col)
dat$col <- ifelse(dat$date > as.POSIXct("2012-04-28"), "after", dat$col)
dat$col <- factor(dat$col, c("before", "during", "after"), ordered=TRUE)
ggplot(dat, aes(x=date, y=y, color=col)) +
geom_point() +
scale_x_datetime(labels=date_format("%m-%Y"),
breaks=date_breaks("1 year")) +
scale_color_manual(values=c("#E69F00", "#56B4E9", "#009E73"))