2016-11-22 82 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)