根据标签分配颜色

Plotly assigning colors based on label

我确信有一种非常简单的方法可以做到这一点,但我终究无法弄清楚。我正在 Plot_ly 中绘制散点图。 我正在绘制的每个点都被分配了一个标签,例如通过、高、低、Sigma 高等...

我的问题是我似乎无法确定 plot_ly 分配给每个标签的颜色。 我希望 Pass 永远是白色,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)))

任何帮助将不胜感激,因为我已经坚持了很长时间!

谢谢!

您在 post 中描述了 label,但您的数据中缺少 label,因此我在 PT 中添加了一个 label 列,其中包含一些与您评论中建议的颜色相对应的标签。 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 创建为一个向量,其中包含命名组件以定义标签和颜色之间的映射。然后它根据 color_maplabel 创建绘图,将颜色分配给 marker 属性 colorlabel 值也用于创建 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)))