2016-07-29 45 views
0

我確信有一個非常簡單的方法來做到這一點,但我不能爲我的生活弄清楚。我在Plot_ly中做了一個散點圖。 我繪製的每個點都被分配了一個標籤,例如通,高,低,高西格瑪等..根據標籤分配顏色

enter image description here

我的問題是,我似乎無法修復分配給每個標籤是什麼顏色plot_ly。 我希望通過永遠是白色,高到永遠是綠色等,但它似乎每次隨機分配顏色。

下面是代碼我使用繪製

 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))) 

任何幫助將非常感激,因爲我已經被困在了好久了!

謝謝!

+0

什麼軟件包包含plot_ly?找不到它。 – Sia

+1

你能提供一個最小的數據集來重現嗎?例如。對象PT,XAVB,YAVB。另外,請添加您正在使用的軟件包的信息(「plotly」).. – Arcoutte

+0

as @Arcoutte建議,請分享您的數據。您可以在數據集上使用dput(),而不是發佈數據框的圖像。 – epo3

回答

1

您描述label在您的文章,但label從你的數據丟失,所以我已經添加了一個labelPT與對應顏色的一些標籤如似乎您的意見將被建議。 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創建分配顏色到屬性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))) 
+0

這很好用!非常感謝 :) – Marcus