r - 如何在 R 中围绕 NA 值绘制多边形?

标签 r na

我正在尝试使用基础图形在我的数据周围绘制一个错误区域。我已经想出如何用多边形来完成它,但如果我的数据中有任何 NA 值,它就会开始表现得很糟糕。

dat <- rnorm(10, mean = 1:10)
depth <- 11:20
sd <- rnorm(10, mean = 1.5, sd = 0.5)
col <- "blue"
alpha <- .2

col <- adjustcolor(col, alpha.f = alpha)
par(mfrow = c(1,2))
plot(dat, depth, type = "o", main = "No NAs in dat or depth")
x <- c(dat - sd, rev(dat + sd))
y <- c(depth, rev(depth))
polygon(x = x, y = y, col = col, border = NA)

dat[7] <- NA
plot(dat, depth, type = "o", main = "NAs in dat or depth")
x <- c(dat - sd, rev(dat + sd))
y <- c(depth, rev(depth))

polygon(x = x, y = y, col = col, border = NA)

这给了我下面的图像: The desired outcome if there are no NAs (left panel) and the error I get when there are NAs (right panel)

似乎 NA 值将下多边形分成两个多边形。我希望它做的是将其保留为一个多边形。

最佳答案

这是使用 rle 的可能解决方案功能:

set.seed(123) # added for reproducibility
dat <- rnorm(10, mean = 1:10)
depth <- 11:20
sd <- rnorm(10, mean = 1.5, sd = 0.5)
col <- "blue"
alpha <- .2

col <- adjustcolor(col, alpha.f = alpha)
par(mfrow = c(1,2))
plot(dat, depth, type = "o", main = "No NAs in dat or depth")
x <- c(dat - sd, rev(dat + sd))
y <- c(depth, rev(depth))
polygon(x = x, y = y, col = col, border = NA)

dat[7] <- NA
plot(dat, depth, type = "o", main = "NAs in dat or depth")
x <- c(dat - sd, rev(dat + sd))
y <- c(depth, rev(depth))

############################################
## code to print error range starts here: ##
############################################
enc <- rle(!is.na(dat))
endIdxs <- cumsum(enc$lengths)
for(i in 1:length(enc$lengths)){
  if(enc$values[i]){
    endIdx <- endIdxs[i]
    startIdx <- endIdx - enc$lengths[i] + 1

    subdat <- dat[startIdx:endIdx]
    subsd <- sd[startIdx:endIdx]
    subdepth <- depth[startIdx:endIdx]

    x <- c(subdat - subsd, rev(subdat + subsd))
    y <- c(subdepth, rev(subdepth))

    polygon(x = x, y = y, col = col, border = NA)
  }
}

enter image description here

想法是为每个连续的非 NA block 绘制一个多边形。

由于 rle,给定一个向量,返回具有相同值的连续 block 的长度和值,我们用它来识别不 NA 的 block ,并绘制一个多边形子集原始datdepthsd 向量。

关于r - 如何在 R 中围绕 NA 值绘制多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33372389/

相关文章:

r - 拆分数据集并将子集并行传递给函数,然后重新组合结果

r - model.matrix() 与 na.action=NULL?

r - ggplot2:geom_point 有时会根据使用的审美删除 NA 值

r - 合并具有相似信息的行

r - 修改别人维护的 R 包

r - 如何根据R中列向量的升序/降序对列表进行子集化

r - 有没有办法使用 RStudio 删除 R 脚本中的所有注释?

r - 您如何将其转换为R中的data.table包语言?

r - 使用 R 的加权调查数据中 logit 的边际效应

r - <NA> 和 NA 有什么区别?