按值替换 NA 但从 geom_smooth 中排除

replacing NAs by value but excluding from geom_smooth

我正在尝试制作散点图并为我的数据绘制回归线。

在绘图之前,我想将 NA 替换为固定数字以获取图表中的所有点,因为它们都在一条线上,所以很容易看到...

但是这样就把我的 geom_smooth 弄乱了。是否有更好的解决方案来将缺失值替换为固定数字,但没有 NA 的 geom_smooth?

set.seed(1234)
df <- data.frame(x=rnorm(100),
                 y=c(rnorm(40), rep(NA,60)))
df[is.na(df)] <- -5
ggplot(df, aes(x,y)) + geom_point() + geom_smooth(method="lm", fullrange=TRUE)

如您在示例中所见,平滑线移动到 "imputed" 个值。

一种方法是将数据存储到两个不同的数据框中:

df2 <- df
df2[is.na(df2)] <- -5

并将它们绘制成两个不同的图层:

ggplot() + geom_point(data=df2, aes(x,y)) + geom_smooth(data=df, aes(x,y), method="lm", fullrange=TRUE)

但也许更简洁的方法是使用 geom_rug(),像这样:

dfna <- df[is.na(df$y),]
ggplot(df, aes(x,y)) + geom_point() + geom_smooth(method="lm", fullrange=TRUE) + geom_rug(data=dfna, aes(x))

给出: