2015-02-20 1 views
0

Вот некоторые фиктивные данные:уровня фактора/цвет присутствует в данных, но отсутствует сюжет, используя scale_color_manual

dummy <- c(rep("castor", 20), rep("dandelion", 20), rep("goose", 20), rep("teapot", 20), rep("bee", 20), rep("fan" , 20)) 
groups <- c(rep(c(rep(1, 10), rep(2, 10)), 6)) 
mydata <- data.frame(a = rnorm(120, 0, 1), b = rnorm(120, 0, 1), dummy = dummy, groups = groups) 

Вот функция, я написал для построения уровня моего выбора из фиктивного столбца в синем цвете. Я хочу, чтобы оставшиеся уровни были выделены серым цветом. Те оставшиеся уровни факторов (давайте назовем их ссылкой) теперь жестко закодированы, что не является проблемой, потому что в моих реальных данных у меня есть больше уровней моего выбора (назовем их тестом) для построения, поэтому я пишу функцию для этого.

custom_plot <- function(level){ 
    df <- subset(mydata, mydata$dummy == level | mydata$groups == "1") 

    # Check that the test level is indeed in the subset df 
    return(table(df$dummy, df$groups))    

    p <- ggplot(df, aes(x = a, y = b, color = dummy, shape = dummy)) + geom_point() + theme_bw() 
    p <- p + scale_color_manual(values = c(level = "blue", "castor" = "gray", "dandelion" = "gray", "fan" = "gray", "goose" = "gray", "teapot" = "gray")) 
    p 
} 

custom_plot("bee") 

Я не могу отправить изображение, потому что мне нужен по крайней мере, 10 репутация, но по существу график я получаю имеет тестовый уровень в легенде, но фактические точки данных отсутствует из графика, и форма/цвет этого уровня пуст. Я попытался использовать аргументы breaks, limits и labels, но ничего не получилось.

Благодарим за помощь!

ответ

1

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

library(ggplot2) 
custom_plot <- function(level){ 
    df <- subset(mydata, mydata$dummy == level | mydata$groups == "1") 

    # create colors vector 
    idx <- which(levels(mydata$dummy) == level) 
    nlev <- nlevels(mydata$dummy) 
    colors <- c(rep("gray", idx-1), "blue", rep("gray", nlev-idx)) 

    p <- ggplot(df, aes(x = a, y = b, color = dummy, shape = dummy)) + 
    geom_point() + 
    theme_bw() 
    p <- p + scale_color_manual(values = colors) 
    p 
} 

custom_plot("bee") 
+0

Удивительный, это сработало, спасибо! Он не определяет уровни факторов в аргументе значений, но он заказывает цвета в первую очередь, так что это не обязательно. – ahj

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