根据标签指定颜色

时间:2016-07-29 09:22:36

标签: r colors label plotly

我确信有一种非常简单的方法可以做到这一点,但我不能为我的生活弄清楚。我在Plot_ly中做了一个散点图。 我正在绘制的每个点都被分配了一个标签,例如通过,高,低,西格玛高等...

enter image description here

我的问题是我似乎无法修复plot_ly分配给每个标签的颜色。 我希望Pass始终为White,High为绿色等等,但它似乎每次都会随机分配颜色。

这是我用来绘制

的代码
      library("plotly")
      p <- plot_ly(PT, 
             type='scatter', 
             x=XAVG, 
             y=YAVG, 
             mode= "markers",
             marker=list(size=3,bgcolor="#e5e5e5"),
             color = label,
             colors=c("yellow","red","cyan","magenta",'blue',"green3","white"),

             zeroline=F,
             text=paste("MEAS = ",PT$MEAS,"Head_ID = ",substr(PT$SHD_ID,2,5)))

任何帮助都会非常感激,因为我已经坚持了很久!

谢谢!

1 个答案:

答案 0 :(得分:1)

您在帖子中描述了label,但数据中缺少label,因此我向label添加了PT列,其中一些标签与颜色相对应似乎在你的评论中建议。 PT现在是:

  SHD_ID       MEAS     XAVG    YAVG PPKLOW PPKUP PKSLOW PKSUP colour label
1  1L3P1   0.300018  -5774.5 94350.5  FALSE FALSE   TRUE FALSE   blue  Fail
2  1LSP0   0.300018  14245.5 94350.5  FALSE FALSE   TRUE FALSE   blue  Fail
3  1L802 600.000000 -25024.5 94350.5  FALSE FALSE  FALSE  TRUE green3  Mean
4  ILSOl   0.300018  -5004.5 94350.5  FALSE FALSE   TRUE FALSE   blue  Fail
5  1LSOO   0.300018  15015.5 94350.5  FALSE FALSE   TRUE FALSE   blue  Fail
6  1LSN2 600.000000 -24254.5 94350.5  FALSE FALSE  FALSE  TRUE green3  Mean

代码首先创建color_map作为带有命名组件的向量,以定义标签和颜色之间的映射。然后,它会根据markercolor创建为color_map属性label指定颜色的图表。 label值也用于创建group,以便在图例中显示颜色到标签的分配。我把标记做得更大,以便更容易看到颜色。

#
# create a map between colors and labels  
# colors ending in numbers are not recognized by plot_ly
#  
  color_map <- c(Pass="yellow", High="red", Low= "cyan",
                 Sigma= "magenta", Mean='limegreen', Fail="blue", Median="violet")
#
# plot points using color_map to assign colors by label
#      show label colors in legend
#
  p <- plot_ly(PT, 
               type='scatter', 
               x=XAVG, 
               y=YAVG, 
               mode= "markers",
               marker=list(size=10, bgcolor="#e5e5e5", 
                              color=color_map[label]),
               group = label,
               zeroline=FALSE,
               text=paste("MEAS = ", MEAS,"Head_ID = ",substr(SHD_ID,2,5)))