【问题标题】:Is there any way to display all datapoints by default without hovering?有什么方法可以在不悬停的情况下默认显示所有数据点?
【发布时间】:2021-05-06 09:48:48
【问题描述】:

需要找出是否有任何方法可以显示开头本身的所有点而无需悬停。根据所选图例,需要显示所有数据点。

  library(plotly)
library(tidyr)
library(plyr)
library(htmlwidgets)
data <- spread(Orange, Tree, circumference)
data <- rename(data, c("1" = "Tree1", "2" = "Tree2", "3" = "Tree3", "4" = "Tree4", "5" = "Tree5"))

fig <- plot_ly(data, x = ~age, y = ~Tree1, type = 'scatter', mode = 'lines', name = 'Tree 1')
fig <- fig %>% add_trace(y = ~Tree2, name = 'Tree 2')
fig <- fig %>% add_trace(y = ~Tree3, name = 'Tree 3')
fig <- fig %>% add_trace(y = ~Tree4, name = 'Tree 4')
fig <- fig %>% add_trace(y = ~Tree5, name = 'Tree 5')
fig <- fig %>% layout(legend = list(x = 0.1, y = 0.9))

fig
        
        javascript <- "
        var myPlot = document.getElementsByClassName('plotly')[0];
        myPlot.on('plotly_hover', 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);
        });"
        fig <- htmlwidgets::prependContent(fig, onStaticRenderComplete(javascript), data = list(''))
        fig

【问题讨论】:

  • 您不能为每个跟踪使用额外的add_text(...) 吗?
  • 但是我得到了一个名为 Aa trace1 的附加图例。当我单击跟踪 0 时,所有数据点都应该消失了。它对你有用吗@PierreGramme

标签: javascript r plotly r-plotly


【解决方案1】:

这里是基于add_text(...)的解决方案,不使用任何自定义JS。您可能需要调整它以获得正确的外观和感觉。必须使用 legendgroup 和 showlegend 参数来获得所需的行为。

fig <- plot_ly(data, x = ~age, y = ~Tree1, type = 'scatter', mode = 'lines+markers', name  = 'Tree 1', legendgroup  = 'Tree 1')
fig <- fig %>% add_text(y = ~Tree1, text = ~paste0("(", age, ", ", Tree1, ")"), legendgroup  = 'Tree 1', showlegend=FALSE)
fig <- fig %>% add_trace(y = ~Tree2, name  = 'Tree 2', legendgroup  = 'Tree 2')
fig <- fig %>% add_text(y = ~Tree2, text = ~paste0("(", age, ", ", Tree2, ")"), legendgroup  = 'Tree 2', showlegend=FALSE)
fig <- fig %>% add_trace(y = ~Tree3, name = 'Tree 3', legendgroup  = 'Tree 3')
fig <- fig %>% add_text(y = ~Tree3, text = ~paste0("(", age, ", ", Tree3, ")"), legendgroup  = 'Tree 3', showlegend=FALSE)
# etc for Trees 4 and 5
fig <- fig %>% layout(legend = list(x = 0.1, y = 0.9))

fig

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 2020-01-13
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2014-02-25
    相关资源
    最近更新 更多