按值替换NAs但从geom_smooth中排除

时间:2015-06-02 09:21:09

标签: 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)

正如您在示例中所看到的,平滑线移动到“估算”值。

1 个答案:

答案 0 :(得分:5)

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

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)

enter image description here

但也许更简洁的方法是使用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))

给出了:

enter image description here