2017-07-24 146 views
3

使用geom_abline(...)(以及geom_vlinegeom_hline)是否会在“天真”使用时导致同一行的多个重叠绘图?geom_abline(...)多次绘制数据?

例如,假设我们感兴趣的是下面的方位散点图:

library(ggplot2) 
library(dplyr) 

k <- 4 
data.frame(id = letters[1:k], 
      m = rnorm(k), 
      b = rnorm(k))[rep(1:k, 30),] %>% 
    mutate(x = rnorm(n()), 
     eps = 0.1*rnorm(n()), 
     y = m*x + b + eps) %>% 
    ggplot(aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ id) -> 
    p 

增加一个AB-线是如下的最简单方法:

print(p + geom_abline(aes(slope = m, intercept = b), color = 'red')) 

的是,“正确的方式“来做到这一点?特别是,上面不是每个方面都绘制了30次ab线?例如,这看起来像它:

print(p + geom_abline(aes(slope = m, intercept = b + eps), color = 'red')) 

如果是这样,是否更好地做这样的事情?

print(p + geom_abline(aes(slope = m, intercept = b), 
         data = Z %>% group_by(id) %>% summarize(m = unique(m), b = unique(b)), 
         color = 'red')) 

请注意,这会产生一些视觉上无法从第一个情节中分辨的东西。我的问题是关于使用这些ggplot函数的正确方法。

+1

'geom_abline' [使您的数据唯一](https://github.com/tidyverse/ggplot2/blob/master/R/geom-abline.r#L121)。所以没有30x重叠绘图。 – lukeA

+0

@lukeA这是一个非常相关的点!事实上,我觉得这确实是我的问题。如果你把它作为一个完整的答案,我会接受它。 – banbh

+0

当然,我会这样做的。 – lukeA

回答

1

geom_abline通过使这些值具有唯一性,在同一地点已经处理了多条线。您还可以通过运行p + geom_abline(aes(slope = m, intercept = b), color = 'red', alpha = .1) - 如果它在同一地点是30行,它们将是不透明的。