Plotly根据标签分配颜色

4

我相信有一种非常简单的方法可以做到这一点,但是我却想不出来。我正在使用Plot_ly绘制散点图。每个要绘制的点都被赋予了一个标签,例如Pass、High、Low、Sigma high等。

enter image description here

我的问题是我似乎无法解决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)))

任何帮助都将不胜感激,因为我在这个问题上已经卡了很久!谢谢!

哪个包含plot_ly?找不到它。 - Siavoshkc
1
你能提供一个最小的数据集来复现吗?例如,对象PT、XAVB、YAVB。另外,请添加您正在使用的包的信息("plotly")。 - Arcoutte
正如@Arcoutte建议的那样,请分享您的数据。您可以使用dput()函数来输出您的数据集,而不是发布数据框的图像。 - epo3
1个回答

4

你在帖子中提到了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的向量,其中包含命名组件,用于定义标签和颜色之间的映射关系。然后,它根据color_maplabel将颜色分配给marker属性color,并创建绘图。还使用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)))

@WaltS 如果我想将“通过”、“高”和“低”这三个状态的颜色指定为“黑色”,而其他状态的颜色可以不同,那么该如何指定呢?提前感谢。 - Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接