2016-11-22 2 views
0

У меня есть кадр данных, который выглядит следующим образом:раскраска с scale_color_manual

d= data.frame(Name = c("B","A","A","B","A","B"), 
       Group= c("one","one","two","two","three","three"), 
       value=c(.5,.6,.7,.8,.4,.2)) 
     d 

    Name Group value 
1 B one 0.5 
2 A one 0.6 
3 A two 0.7 
4 B two 0.8 
5 A three 0.4 
6 B three 0.2 

, когда я сюжет выглядит следующим образом. обратите внимание, где линия является

ggplot(d, 
      aes(x=factor(Group), 
       y= value, 
       group= Name , color =Name)) + 
     geom_point()+geom_line() 

enter image description here

Теперь я хочу, чтобы цвет линии, используя шкалу цвета руководство, как это:

 library(RColorBrewer) 
    n <- 60 
    qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',] 
    col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals))) 

    ggplot(d, 
     aes(x=factor(Group), 
      y= value, 
      group= Name , color =Name)) + 
    geom_point()+geom_line() + 
     scale_color_manual(name="name", 
        labels = unique(d$Name) 
        , 
        values= col_vector[14:(14+(length(unique(d$Name)))-1)] 
    ) 

, который производит это изображение, где линия «А» не верно. Теперь это линия «B». Как я могу масштабировать руководство по цвету для изменения вывода с использованием цветов в col_vector, но сохранить правильный результат?

enter image description here

ответ

3

Функция unique() возвращает значения в порядке, как они расположены в вашем dataframe.

unique(d$Name) 
[1] B A 
Levels: A B 

Таким образом, вы должны использовать функцию levels().

levels(d$Name) 
[1] "A" "B" 

Если переменная не сохраняется как фактор, вы можете добавить sort() функцию.

sort(unique(d$Name)) 
[1] "A" "B" 
0

Вы произвольно изменять имя метки с labels в функции scale_color_manual.

Например, запустите следующий код:

p <- ggplot(d, aes(x=factor(Group),y= value, 
        group= Name , color =Name)) +geom_point()+geom_line() 

p <- scale_color_manual(labels = c('ti','to'), 
         values= col_vector[14:(14+(length(unique(d$Name)))-1)]) 

И потом, первая запись в d$Name является B (что unique посылает обратно)

Я бы посоветовал создать именованный вектор первого и затем использовать этот вектор в scale_color_manual:

newPal<-setNames(col_vector[14:(14+(length(unique(d$Name)))-1)],unique(d$Name)) 

p + scale_color_manual(values=newPal) 
Смежные вопросы