plotly: пользовательская функция текста при наведении не работает

Кажется, что пользовательские plotly наведения не работают. Я использую пользовательский текст при наведении и hoveron='points+fills', чтобы показать это как на точках, так и на заполненной форме. При наведении на точки, как и ожидалось, отображается моя пользовательская строка. Однако при наведении на фигуру отображается другое наведение (без моей пользовательской строки)!

Пример кода:

library(plotly)
data.frame(AA=c(2,3,3,2,NA, 6,7,7,6,NA),
       BB=c(2,2,3,2,NA, 6,6,7,6,NA),
       CC=c(rep('abc', 5), rep('xyz', 5)),
       LL=c(rep('A', 5), rep('B', 5))) %>%
plot_ly() %>%
         add_trace(x=~AA,
                   y=~BB,
                   text=~paste('<br> <b>Example</b> of <em>custom</em> hover text <br>', LL, '<br>', CC, '<br>.'),
                   split=~LL, 
                   mode="lines", 
                   fill="toself", 
                   hoveron='points+fills',
                   type="scatter", 
                   color = I(c(rep(toRGB("black", 1), 5),
                               rep(toRGB("red", 1), 5)))
                   )

Наведение на точку (работает, как и ожидалось, с пользовательским текстом при наведении): точка наведения

Наведение курсора на заполненную фигуру (не работает — пользовательский текст при наведении отсутствует): заливка при наведении

Другая сторона этого вопроса может быть продемонстрирована ниже. Замена hoveron='points+fills' на hoveron='fills'. Пользовательский текст нигде не виден.

library(plotly)
data.frame(AA=c(2,3,3,2,NA, 6,7,7,6,NA),
           BB=c(2,2,3,2,NA, 6,6,7,6,NA),
           CC=c(rep('abc', 5), rep('xyz', 5)),
           LL=c(rep('A', 5), rep('B', 5))) %>%
    plot_ly() %>%
             add_trace(x=~AA,
                       y=~BB,
                       text=~paste('<br> <b>Example</b> of <em>custom</em>     hover text <br>', LL, '<br>', CC, '<br>.'),
                       split=~LL, 
                       mode="lines", 
                       fill="toself", 
                       hoveron='fills',
                       type="scatter", 
                       color = I(c(rep(toRGB("black", 1), 5),
                                   rep(toRGB("red", 1), 5)))
                       )

Результат: другой пример

Вероятно, это ошибка, есть идеи, как ее исправить?

Спасибо

вывод sessionInfo():

R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 17.10

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so

locale:
 [1] LC_CTYPE=pt_BR.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=pt_BR.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] bindrcpp_0.2  plotly_4.7.1  ggplot2_2.2.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.16        bindr_0.1.1         magrittr_1.5       
 [4] munsell_0.4.3       xtable_1.8-2        viridisLite_0.3.0  
 [7] colorspace_1.3-2    R6_2.2.2            rlang_0.2.0        
[10] httr_1.3.1          plyr_1.8.4          dplyr_0.7.4        
[13] tools_3.4.4         grid_3.4.4          data.table_1.10.4-3
[16] gtable_0.2.0        crosstalk_1.0.0     htmltools_0.3.6    
[19] yaml_2.1.18         lazyeval_0.2.1      assertthat_0.2.0   
[22] digest_0.6.15       tibble_1.4.2        shiny_1.0.5        
[25] purrr_0.2.4         tidyr_0.8.0         htmlwidgets_1.0    
[28] mime_0.5            glue_1.2.0          compiler_3.4.4     
[31] pillar_1.2.1        scales_0.5.0        jsonlite_1.5       
[34] httpuv_1.3.6.2      pkgconfig_2.0.1

person GP.    schedule 09.04.2018    source источник
comment
Вы можете добавить вывод sessionInfo()?   -  person Maximilian Peters    schedule 09.04.2018
comment
Конечно, я только что добавил.   -  person GP.    schedule 09.04.2018
comment
Какой текст вы ожидаете увидеть? Hovertext показывает информацию, относящуюся к точке, поэтому отображение той же информации для фигуры может привести к путанице.   -  person Maximilian Peters    schedule 10.04.2018
comment
Это демонстрация проблемы, поэтому данные не имеют смысла. Я хочу сказать, что пользовательское наведение текста не работает должным образом, поскольку оно не учитывает text информацию. Обратите внимание, в реальном случае может потребоваться добавить что-то полезное в пользовательский ховер.   -  person GP.    schedule 10.04.2018


Ответы (1)


Использование атрибута name похоже работает (R 3.6.1, пакет plotly v.4.9.0) - в отличие от text, который просто связывает блок текста с каждой строкой/точкой, name служит группирующей переменной в этом контексте:

library(plotly)

geod = data.frame(
  cx = c(0,10,6,0,5,5,9,5),
  cy = c(1,8,2,1,6,8,7,6),
  grps = rep(c('foobar','barfou'),each = 4),
  ptxt = LETTERS[1:8]
)
plot_ly() %>% 
  add_polygons(
    data = geod,
    x = ~cx, y = ~cy,
    name = ~grps, text = ~ptxt,
    hoveron = 'points+fills'
  )

Еще одна приятная особенность этого поведения заключается в том, что нам не нужно вставлять значения NA для разделения групп.

Если вы хотите настроить метки при наведении по-разному для заливок и точек, то может быть проще просто разделить на две отдельные трассы: здесь при наведении на точки отображается и имя группы, и x/ y/text, что мне не всегда кажется желательным.

наведите курсор на точку

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

person smarchese    schedule 14.09.2019