我在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)
答案 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))
结果: