我正在尝试制作散点图,并为我的数据绘制回归线。
在绘图之前,我希望将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)
正如您在示例中所看到的,平滑线移动到“估算”值。
答案 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)
但也许更简洁的方法是使用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))
给出了: