具有 NA 的线之间的基本 R 阴影

Base R shade between lines having NA

在给定这两个约束的情况下,是否有可能使用 Base R 来遮蔽两个 lines 之间的区域:

这是一个SSCCE(不包括Shiny部分):

#my sample data
vals_time <- c(1:10)
vals_line1 <- c(8, 9, NA, NA, 7, 8, 7, NA, 9, 4)
vals_line2 <- c(4, 5, NA, NA, 6, 10, 8, NA, 5, 2)

#create line graphs without the shade
plot(x = vals_time, y = vals_line1, type = "l", ylim = c(0,11))
lines(x= vals_time, y = vals_line2)

下面是我如何使用 polygon 函数:

polygon(x = c(vals_time, vals_time[10:1]),
        y = c(vals_line1, vals_line2[10:1]),
        col = rgb(1, 0, 0, 0.5))

您可以按 na 值拆分数据,然后对拆分后的数据使用 polygon。我会先创建一个 data.frame。然后你可以 split NA 上的 data.frame 并使用 na.omit 来省略 NA 值。最后使用 lapplypolygon 绘制数据。

df <- data.frame(time = vals_time, 
                 l1 = vals_line1, 
                 l2 = vals_line2)
plot(x = df$time, y = df$l1, type = "l", ylim = c(0, 11))
lines(x = df$time, y = df$l2)
lst <- lapply(split(df, cumsum(is.na(df$l1))), na.omit)
lapply(lst, function(d) 
  polygon(x = c(d$time, rev(d$time)), y = c(d$l1, rev(d$l2)), col = rgb(1,0,0,0.5)))