2016-08-03 3 views
2

Предположим, что у меня есть такие данные:Подобные цвета для аналогичных данных в ggplot2

Time, variable, value 
0, A, 1.2 
1, A, 2.3 
2, A, 3.4 
0, B, 1.1 
1, B, 2.4 
2, B, 3.7 
0, C, 1.2 
1, C, 2.1 
2, C, 3.3 
0, D, 1.4 
1, D, 2.5 
2, D, 3.5 
0, E, 1.8 
1, E, 2.9 
2, E, 3.1 
0, F, 0.8 
1, F, 2.2 
2, F, 3.3 
0, G, 1.7 
1, G, 4.3 
2, G, 4.4 
0, H, 1.0 
1, H, 2.2 
2, H, 3.1 

Если я что-то вроде qplot(Time, value, color = variable, data = mydata, geom = "line") я буду получать в этом случае 8 разноцветные линии по умолчанию. Предположим, что данные A, B, C, D связаны и данные E, F, G, H связаны. Я хочу показать это отношение по цвету. Как я могу сказать R, что я хочу, чтобы, например, A, B, C, D отображались как похожие, но различимые оттенки синего, а D, E, F, G отображались как похожие, но различимые оттенки зеленого?

+1

В ggplot нет функции для «похожих, но различимых» цветов. Вы можете попробовать добавить какое-либо свойство к альфе, чтобы немного изменить цвет или отобразить тип линии? Но вам, вероятно, придется просто указать цвета вручную с помощью функции scale_color_manual для получения желаемых результатов. – MrFlick

+0

И как мне это сделать? –

ответ

4

Вы можете создавать собственные весы, сначала группируя свой набор данных, а затем указывая цветной пивовар для двух групп. Функция brewer.pal позволяет вам выбирать из шкал обычных цветов.

library(dplyr) 
df <- df %>% mutate(groups = factor(as.numeric(df$variable %in% 
              LETTERS[1:4]))) 

blues <- RColorBrewer::brewer.pal(6, "Blues")[3:6] 
reds <- RColorBrewer::brewer.pal(6, "Reds")[3:6] 

    ggplot() + 
     geom_line(data = df, 
       aes(x = value, y = variable, 
        group = variable, 
        color = interaction(factor(groups), 
             variable))) + 
     scale_color_manual("Variable", labels = unique(df$variable), 
         values = c(blues, reds)) 

enter image description here

+0

К сожалению, я не видел этого, прежде чем отправил. –

0

Это то, что я в конечном итоге делает. Я на самом деле был 10 временных рядов, и я хотел, чтобы сгруппировать их визуально по цвету в двух сетах из пяти:

library(RColorBrewer) 
# you have to pick the last 5 of 9 colors because if you just specify 5 colors, the first will be way too pale 
blues = brewer.pal(9,"Blues")[5:9] 
greens = brewer.pal(9, "Greens")[5:9] 
mycolors = append(blues, greens) 
ggplot(data = mydata, aes(x=Time, y=value, color=variable)) + geom_line() + theme_classic() + scale_colour_manual(values=mycolors) 

Не идеально - заказ цветов вы создаете вопросы, вы должны создать такое же количество цвета, поскольку у вас есть серия данных, но это лучше, чем поиск и ввод значений RGB IMO.

0

Я думаю, что вам нужно просто добавить новую переменную и классифицировать A, B C, D в одну группу, в то время как E, F, G, H в другой.

mydata$variable=as.character(mydata$variable) 
    mydata$variable1=mydata$variable 
    ifelse(mydata$variable1[]==c('A','B','C'),'a','b') 

Надеюсь, это поможет!

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