Plotly(r)显示点击线上的所有hoverinfos

时间:2017-09-13 13:51:43

标签: javascript r plotly

我有一个很少数据的线图。有点像这样:

plot_ly(x = c( -2, 0, 1.5 ),y = c( -2, 1, 2.2), 
        type = 'scatter' ,mode = 'lines+markers') %>% 
 add_trace(x=c(-1,0.4,2.5),y=c(2, 0, -1),type='scatter',mode='lines+markers')

我想知道plotly是否可以在一行中显示一行的所有hoverinfos。这样,例如当我点击图例中的“迹线1”时,我可以看到它在相应点旁边有点(-1,2),(0.4,0),(2.5,-1)。到目前为止找不到任何东西。

1 个答案:

答案 0 :(得分:2)

您可以使用Plotly.Fx触发悬停事件,并使用htmlwidgets添加必要的Javascript代码。

Fx.hover需要curveNumbercurvePoint(跟踪的 n -th)作为输入参数。如果要触发多个点的事件,则需要传递一组对象。

enter image description here

library("plotly")
library("htmlwidgets")

p <- plot_ly(x = c(-2, 0, 1.5 ),
             y = c(-2, 1, 2.2), 
             type = 'scatter',
             mode = 'lines+markers') %>% 
  add_trace(x = c(-1, 0.4, 2.5),
            y = c(2, 0, -1),
            type = 'scatter', 
            mode = 'lines+markers') %>% 
  layout(hovermode = 'closest')

javascript <- "
var myPlot = document.getElementsByClassName('plotly')[0];
myPlot.on('plotly_click', function(data) {
  var hover = [];
  for (var i = 0; i < data.points[0].data.x.length; i += 1) {
    hover.push({curveNumber: data.points[0].curveNumber,
                pointNumber: i});
  }
  Plotly.Fx.hover(myPlot, hover);
});"
p <- htmlwidgets::prependContent(p, onStaticRenderComplete(javascript), data = list(''))
p

注意:Plotly.Fx将为deprecated