2016-01-13 2 views
1

У меня есть три переменных a, b, c. Я хочу сделать ggpairs участок a и b с каждой переменной (во всех панелях), окрашенной c. Как я могу это сделать?Раскраска каждой точки по реальной стоимости на графике ggplot2/ggpairs

Пример кода

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? 

я могу сделать это с помощью базы R довольно легко:

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

Как это сделать с ggpairs?

(редактирование: выкл-на-один)

+1

ggpairs (data = data.frame (a, b, c = colorRampPalette (c ('red', 'blue')) (N) [floor (N * point.colors)]), columns = 1: 2, цвет = "c") '? – lukeA

+0

Не работает и для меня. –

+0

(ошибка). Ошибка в data.frame (a, b, c = colorRampPalette (c («красный», «синий»)) (N) [floor (N *: ) аргументы подразумевают различное количество строк: 100, – rhombidodecahedron

ответ

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

Теперь вы можете сделать это в ggpairs путем сопоставления эстетическим к определенному сюжету

ggpairs(data=data.frame(a, b, point.colors), 
     columns=c("a", "b"), 
     lower = list(continuous = "points", mapping=aes(color=point.colors))) 

Заметим, что в этом случае вам не нужно, чтобы добавить point.colors к вашему dataframe как aes вызов будет найдите его в глобальной среде (и тогда вы также можете опустить оператор columns=). Тем не менее, он чувствует себя немного более надежно, чтобы включить его.

PS Учитывая, что вам не удалось использовать функциональность p[2,1] = p21, указанную в ответе bouncys, вам может потребоваться обновить версию GGally.

Смежные вопросы