在ggplot2 / ggpairs图中用实际值对每个点着色

时间:2016-01-13 20:09:39

标签: r ggplot2

我有三个变量abc。我想制作一个ggpairs的{​​{1}}情节,其中ab每个变量(在所有面板中)都由c着色。我怎么能这样做?

代码示例

library(ggplot2)
library(GGally)
N <- 100
a <- rnorm(N, 0, 1)
b <- rnorm(N, 0, 1)
point.colors <- runif(N, 0, 1)
ggpairs(data=data.frame(a, b)) # How to add point.colors here? 

我可以很容易地使用base R来做到这一点:

plot(a, b, col=colorRampPalette(c('red', 'blue'))(N)[1+floor(N*point.colors)])

如何使用ggpairs

(编辑:off-by-one)

2 个答案:

答案 0 :(得分:2)

为什么不在ggpairs对象中更改图?

p = ggpairs(data = data.frame(a,b)) 
p21 = qplot(a,b,colour = point.colors) 
#next line didn't work for user
#p[2,1] = p21
p$plots[[3]] = p21

答案 1 :(得分:1)

现在,您可以通过将美学映射到特定情节

,在ggpairs内完成此操作
ggpairs(data=data.frame(a, b, point.colors), 
        columns=c("a", "b"), 
        lower = list(continuous = "points", mapping=aes(color=point.colors)))

请注意,在这种情况下,您无需向数据框添加point.colors,因为aes调用会在全局环境中找到它(因此您也可以省略{{1}声明)。但是,包含它会感觉更加健壮。

PS鉴于您无法使用bouncys答案中提供的columns=功能,您可能需要更新p[2,1] = p21的版本。