突出显示ggplot2中某个x范围内的区域

dre*_*mer 6 plot r ggplot2

我想突出显示ggplot2图形的某些区域,类似于此处所做的:如何在图上突出显示时间范围?

我有一个向量v 0 0 1 1 1 ... ,它指示我是否希望图表的那一部分突出显示,是或否.也就是说,与上面的问题相反,我没有应该突出显示的每个范围的xmin和xmax值,但我也怀疑这是否有效,因为我需要突出显示多个范围.

有没有办法用突出显示用于突出显示的绘图语句dates[v == 1](日期是带有图的x轴日期的向量)?如果没有,还有另一种好办法吗?

pic*_*ick 13

使用diff得到区域颜色绘制矩形,其余是非常简单的.

## Example data
set.seed(0)
dat <- data.frame(dates=seq.Date(Sys.Date(), Sys.Date()+99, 1),
                  value=cumsum(rnorm(100)))

## Determine highlighted regions
v <- rep(0, 100)
v[c(5:20, 30:35, 90:100)] <- 1

## Get the start and end points for highlighted regions
inds <- diff(c(0, v))
start <- dat$dates[inds == 1]
end <- dat$dates[inds == -1]
if (length(start) > length(end)) end <- c(end, tail(dat$dates, 1))

## highlight region data
rects <- data.frame(start=start, end=end, group=seq_along(start))

library(ggplot2)
ggplot(data=dat, aes(dates, value)) +
  theme_minimal() +
  geom_line(lty=2, color="steelblue", lwd=1.1) +
  geom_point() +
  geom_rect(data=rects, inherit.aes=FALSE, aes(xmin=start, xmax=end, ymin=min(dat$value),
                ymax=max(dat$value), group=group), color="transparent", fill="orange", alpha=0.3)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述