Как объединить информацию из нескольких следов в единый сюжетный ховертекст в блестящем - PullRequest
0 голосов
/ 18 января 2020

Цель кода - создать блестящее приложение, использующее сюжет. Мы хотим, чтобы информация для каждой линии трассировки отображалась в единственном шаблоне hovertemplate для любой заданной точки вдоль оси x. Например, три линии трассировки в диаграмме рассеяния в единственном числе (mode = 'lines + markers'), и когда пользователь помещает курсор в точку рассеяния в единственном числе, текст при наведении курсора дает им оценки по каждому из трех графиков для этого x- ценность.

В приведенном ниже примере мы используем реактивную функцию Data () в качестве данных для одного участника, который был предварительно задан в коде конца сервера. variable1, variable2 и variable3 являются столбцами из Data (), которые мы наносим на график рассеяния. Ни у одного решения не будет особой спецификации ховертекста, в отличие от 3 отдельных ниже.

Мы хотим, чтобы шаблон hovertemplate / hovertext выглядел примерно так:

Вот ваши оценки

переменная 1 = XXX

переменная 2 = XXX

переменная 3 = XXX

Для продвинутых точек: линия вертикали, появляющаяся при наведении курсора на точку данных, идущую сверху вниз на графике в этой точке данных, Выглядит хорошо.

output$distPlot <-  renderPlotly({


  plot_ly() %>%
    add_trace(                  # trace for variable 1         
      type = 'scatter',
      mode = 'lines+markers',
      x = Data()$Sys.time          # take the time variable from data() for x
      y = Data()$variable1,        # Plot variable1
      hovertemplate = paste(
        "<b>Here are your scores</b><br><br>",
        "variable1: y <br>",
        "variable2: plot2$y <br>",    # placeholder for solution
        "variable3: plot3$y <br>",    # placeholder for solution
        "<extra></extra>"
      ),
      showlegend = TRUE
    ) %>%

       add_trace(                   # trace for variable 2            
      type = 'scatter',
      mode = 'lines+markers',
      x = Data()$Sys.time          # take the time variable from data() for x
      y = Data()$variable2,        # Plot variable2
      hovertemplate = paste(
        "<b>Here are your scores</b><br><br>",
        "variable1: plot1$y <br>",         # Placeholder for solution
        "variable2: y <br>",   
        "variable3: plot3$y <br>",    # Placeholder for solution
        "<extra></extra>"
      ),
      showlegend = TRUE
    ) %>%

    add_trace(                      # trace for variable 3                     
      type = 'scatter',
      mode = 'lines+markers',
      x = Data()$Sys.time          # take the time variable from data() for x
      y = Data()$variable3,        # Plot variable3
      hovertemplate = paste(
        "<b>Here are your scores</b><br><br>",
        "variable1: plot1$y <br>",    # Placeholder for solution
        "variable2: plot2$y <br>",    # Placeholder for solution
        "variable3: y <br>",          
        "<extra></extra>"
      ),
      showlegend = TRUE
    ) 
})      # Close plot

1 Ответ

1 голос
/ 21 января 2020

Вам просто нужно установить hovermode = 'compare'.

Вот простой пример:

library(shiny)
library(plotly)

DF <- data.frame(values = c(seq(1, 10, length.out = 10),
                            seq(1, 20, length.out = 10),
                            seq(1, 30, length.out = 10)), variables = rep(LETTERS[1:3], each = 10))

ui <- fluidPage(
plotlyOutput("myPlot")  
)

server <- function(input, output, session) {
  output$myPlot <- renderPlotly({
    plot_ly(DF, y = ~values, color = ~variables, type = "scatter", mode = "lines+markers") %>%
      layout(hovermode = 'compare')
  })
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...