用scale_color_manual着色

时间:2016-11-22 16:23:02

标签: r ggplot2

我的数据框看起来像这样:

<!DOCTYPE html>
<html xmlns:wicket>
<body>

<table cellspacing="0" class="dataview">
 <tbody>
   <tr wicket:id="simple">
     <td><span wicket:id="id">Test ID</span></td>
   </tr>
</tbody>
</table>

<div wicket:id="navigator"></div>
</body>
</html>

当我绘制它时看起来像这样。注意A线的位置

   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

enter image description here

现在我想使用比例颜色手册为这些线着色,如下所示:

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

产生这个图像,其中&#34; A&#34;线路不正确。它现在是&#34; B&#34;线。如何使用col_vector中的颜色缩放颜色手动以更改输出,但保持正确的输出?

enter image description here

2 个答案:

答案 0 :(得分:2)

函数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"

答案 1 :(得分: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)