按值替换NAs但从geom_smooth中排除

drm*_*iod 1 r ggplot2

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

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

但就这样它弄乱了我的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)
Run Code Online (Sandbox Code Playgroud)

正如您在示例中所看到的,平滑线移动到"插补"值.

jub*_*uba 5

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

df2 <- df
df2[is.na(df2)] <- -5
Run Code Online (Sandbox Code Playgroud)

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

ggplot() + geom_point(data=df2, aes(x,y)) + geom_smooth(data=df, aes(x,y), method="lm", fullrange=TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但也许更简洁的方法是使用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))
Run Code Online (Sandbox Code Playgroud)

这使 :

在此输入图像描述