Сюжетное назначение цветов на основе метки

Я уверен, что есть действительно простой способ сделать это, но я не могу понять это. Я делаю точечный график в Plot_ly. Каждой точке, которую я рисую, присвоена метка, например. Pass, High, Low, Sigma high и т.д...

введите здесь описание изображения

Моя проблема в том, что я не могу исправить, какой цвет 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)))

Любая помощь будет высоко оценена, так как я застрял на этом целую вечность!

Спасибо!


person Marcus    schedule 29.07.2016    source источник
comment
Какой пакет содержит plot_ly? Не удалось найти.   -  person Siavoshkc    schedule 29.07.2016
comment
Не могли бы вы предоставить минимальный набор данных для воспроизведения? Например. объекты ПТ, ХАВБ, ЯВБ. Кроме того, добавьте информацию о пакете, который вы используете (сюжетно), пожалуйста.   -  person Arcoutte    schedule 29.07.2016
comment
как предложил @Arcoutte, поделитесь своими данными. Вы можете использовать dput() в своем наборе данных вместо публикации изображения фрейма данных.   -  person epo3    schedule 29.07.2016


Ответы (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 как вектор с именованными компонентами, чтобы определить сопоставление между вашими метками и вашими цветами. Затем он создает график, назначая цвета свойству marker color на основе 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)))
person WaltS    schedule 29.07.2016
comment
@WaltS, если я хочу указать определенный цвет только для Pass, High и Low как черный, а для остальных могут различаться разные цвета......, тогда как указать ??..... заранее спасибо - person Kumar; 23.10.2019