2013-10-03 6 views
3

У меня есть проблема, которая является очень простой, но я не могу ее решить, поскольку я едва использовал ggplots2 ... Я просто хочу, чтобы сюжет слева использовал цвета в переменная color1 и график справа используют цвета в переменной color2. Это MWE:ggplot2: использовать разные цвета в разных фасетках

library(reshape2) 
library(ggplot2) 

a.df <- data.frame(
    id=c("a","b","c","d","e","f","g","h"), 
    var1=c(1,2,3,4,5,6,7,8), var2=c(21,22,23,24,25,26,27,28), 
    var3=c(56,57,58,59,60,61,62,63), 
    color1=c(1,2,"NONE","NONE",1,2,2,1), 
    color2=c(1,"NONE",1,1,2,2,"NONE",2) 
) 

a.dfm <- melt(a.df, measure.vars=c("var2","var3")) 

ggplot(a.dfm, aes(x=value, y=var1, color=color1)) + 
    geom_point(shape=1) + 
    facet_grid(. ~ variable) 

Спасибо большое!

+1

У меня есть ощущение, что ваши потребности данные будут перестроены дальше до черчения. Но чтобы сказать, если это так, можете ли вы предоставить еще несколько контекстов и немного описать свои переменные. Приветствия. – Henrik

+0

Не точный дубликат, но я думаю, что [этот вопрос] (http://stackoverflow.com/questions/10267583/programmatically-specifying-colours-in-scale-fill-manual-ggplot-call) охватывает многие из тех же и стоит проверить. – SlowLearner

+0

это просто очень простой пример; У меня есть больший кадр данных с аналогичной структурой, с тремя различными измерительными переменными. Я хочу построить 1-й (по оси y) по сравнению со вторым и третьим независимо (по оси x). Кроме того, я выделяю записи, которые являются 25% с более высокими значениями var1 и более высокими значениями var2, 25% с более низкими значениями var1 и более низкими значениями var2, и теми же для var1 vs var3. Это 2 цветовые шкалы, которые я хочу изобразить (left = top 25% var1vs2 в красном, нижнем 25% var1vs2 в синем, остальное в черном, right = top 25% var1vs3 в красном, нижнем 25% var1vs3 в синем, отдых в черном). – DaniCee

ответ

4

Я думаю, что самый простой подход с вашими данными - создать дополнительный столбец, который имеет цвет, определенный соответствующим образом на основе значения variable. Поскольку есть только два возможных значения, которые могут принять variable, это не так сложно.

a.dfm2 <- transform(a.dfm, 
        color.use = ifelse(variable=="var2", 
             as.character(color1), 
             as.character(color2))) 

ggplot(a.dfm2, aes(x=value, y=var1, color=color.use)) + 
    geom_point(shape=1) + 
    facet_grid(. ~ variable) 

enter image description here

+1

Работает как очарование! Я не уверен, что понимаю шаг transform(), но я буду работать над этим! Благодаря! – DaniCee

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