具有 NA 的线之间的基本 R 阴影
Base R shade between lines having NA
在给定这两个约束的情况下,是否有可能使用 Base R 来遮蔽两个 lines
之间的区域:
- 我无法使用
ggplot2
,因为我的应用程序的其他部分将无法运行(Shiny
clickId
限制;更具体地说,使用 ggplot2
的 clickId
没有给出数据的真实x和y值)。
- 我也不能使用
polygon
,因为 NA
存在于我的数据中,这使得 polygon
创建的 "shade" 过早关闭。
这是一个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
值。最后使用 lapply
和 polygon
绘制数据。
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)))
在给定这两个约束的情况下,是否有可能使用 Base R 来遮蔽两个 lines
之间的区域:
- 我无法使用
ggplot2
,因为我的应用程序的其他部分将无法运行(Shiny
clickId
限制;更具体地说,使用ggplot2
的clickId
没有给出数据的真实x和y值)。 - 我也不能使用
polygon
,因为NA
存在于我的数据中,这使得polygon
创建的 "shade" 过早关闭。
这是一个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
值。最后使用 lapply
和 polygon
绘制数据。
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)))