ggplot2:突出显示不连续的背景

时间:2015-04-11 21:24:16

标签: r ggplot2

我在R中使用ggplot2来绘制csv文件中的一些数据。我特别感兴趣的是看到数据的不连续性。在我的线图上,ggplot在线条中留下了空白,但我想更进一步,并在这些不连续发生时突出显示背景。有没有办法做到这一点?我看到了这个答案(ggplot2: highlight chart area),但我无法理解他们的解决方案,试图让它对我有用(我对ggplot相当缺乏经验)。

以下是其中一张图:

基本上我想用透明的红色突出右边那些间隙的背景。

以下是我用来生成图表的代码:

p5 <- ggplot(d2.m, aes_string(x="timestamp",y="value")) +
      geom_line() +
      ylab("Latency (s)") +
      xlab("Time (s)") +
      scale_y_continuous(labels = comma) +
      facet_wrap(~variable, scales="free", ncol=1)

print(p5)

1 个答案:

答案 0 :(得分:4)

您可以使用此geom_rect解决方案:

require(ggplot2)

set.seed(1337)
dat <- data.frame(x = 1:11, y = sample(c(1:5, rep(NA,2)), 11, replace = TRUE))
ggplot() + 
  geom_line(data = dat, aes(x = x, y = y)) 

实际代码

cum_sum <- cumsum(is.na(dat$y))
diff_diff <- diff(diff(cum_sum)) # change of the slope
start <- which(diff_diff== 1)+1 # positive inflection point's
if (is.na(dat$y[1])) start <- c(1,start)
end <- which(diff_diff == -1)+2 # negative inflection point's
if (is.na(tail(dat$y,1))) end <- c(end, length(dat$y))

dat_rect <- data.frame(xmin = start, xmax = end)

ggplot() + 
  geom_line(data = dat, aes(x = x, y = y)) +
  geom_rect(data = dat_rect, alpha = 0.3, aes(xmin = xmin, xmax = xmax, ymin = -Inf, ymax = Inf))

结果: enter image description here