具有NA的线之间的基础R色调

时间:2015-04-20 06:13:58

标签: r ggplot2 shiny

在给定这两个约束的情况下,是否有可能使用Base R对两个lines之间的区域进行着色:

  • 我无法使用ggplot2,因为我的应用的其他部分无效(Shiny clickId限制;更具体地说,使用ggplot2&#39 ; s clickId没有给出数据的真实x和y值。
  • 我也无法使用polygon,因为我的数据中存在NA,这使得"阴影"由polygon过早关闭创建。

这是一个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))

1 个答案:

答案 0 :(得分:2)

您可以按na值拆分数据,然后在拆分数据上使用polygon。我首先要创建一个data.frame。然后,您可split data.frame NAna.omit并使用NA省略lapply个值。最后使用polygondf <- 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))) 绘制数据。

{{1}}