如何使用ggplot从图中删除NA值?

How to remove NA value from the plot with ggplot?

我有 data.frame A(3 列:x、值和 SD)三列中同一行的 NA 值。 我在 ggplot 中绘制了标准差 (SD),代码是:

p <- ggplot(A,aes(x=x,y=value))
p + geom_ribbon(aes(ymin=value-SD,ymax=value+SD),fill = "gray",na.rm=T)+ 
  geom_line(aes(y=value))+
  theme_bw()+ theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
                    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))

结果是:

我不会绘制 NA 值(在上面的图中是带黑线的灰色方块),我该怎么做?我需要 df A 的 plot 子集? 谢谢

这里有两个绘制间隙的选项:

# create sample data
set.seed(1)
df <- data.frame(x=1:100, y=runif(100),SD=0.1)
df[45:55, c("x", "y", "SD")] <- NA

# option 1: groupings
ggplot(df, aes(x, y, group=cumsum(is.na(df$x)))) + geom_ribbon(aes(ymin=y-SD,ymax=y+SD),fill = "gray") + geom_line() 

# options 2: interpolations
ggplot(df, aes(zoo::na.approx(x), y)) + geom_ribbon(aes(ymin=y-SD,ymax=y+SD),fill = "gray") + geom_line() 

首先是一些示例数据

A = data.frame(x = 1900:2000, value=cumsum(rnorm(101)), SD= 0.5)
A[50:60, 2:3] = NA

如果我理解你的问题,你或多或少就有了答案。只需将 na.rm 更改为 FALSE

p = ggplot(A,aes(x=x,y=value))
p + geom_ribbon(aes(ymin=value-SD,ymax=value+SD),fill = "gray",na.rm=FALSE)+ 
  geom_line()+
  theme_bw()+ 
   theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
                    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))