2016-11-22 81 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 

當我繪製它看起來是這樣的。注意到,其中A線是

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)] 
    ) 

產生這個圖像,其中「A」行是不正確。現在是「B」線。我如何縮放顏色手冊以使用col_vector中的顏色更改輸出,但保留正確的輸出?在訂單

enter image description here

回答

3

功能unique()返回值,因爲它們是位於您的數據幀。

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

你是任意的scale_color_manual函數內的labels修改標籤的名稱。

例如,運行下面的代碼:

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)