Определить сюжеты сюжетом click_event - PullRequest
1 голос
/ 23 марта 2020

Вопрос: Предположим сюжетный участок, который объединяет в себе несколько графиков. Есть ли способ идентифицировать номер подзаголовка с помощью события plotly_click, кроме curveNumber и pointNumber? Например, (например, код ниже), p1 получает назначенный номер 0, p2 получает назначенный номер 1, p3 получает назначенный номер 2, и я могу получить эти числа с помощью команды, аналогичной событию plotly_click?

Требуемый вывод :

curveNumber pointNumber   x  y plotNumber
          4           1 Top 15         2

Пример кода

library(shiny)
library(plotly)
library(data.table)

dt <- data.table(
  quarter = c("2020 Q1", "2020 Q1", "2019 Q4", "2019 Q4", "2019 Q3", "2019 Q3"),
  type = c("Hop", "Top", "Hop", "Top", "Hop", "Top"),
  count2 = c(3, 4, 5, 6, 0, 1),
  count = c(10, 20, 30, 40, 0, 15)
)

dt[, type := as.factor(type)]

ui <- fluidPage(
  mainPanel(
    plotlyOutput("plot")
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

  output$plot <- renderPlotly({
    p1 <- plot_ly(dt[quarter == "2020 Q1"],
                  x = ~type,
                  y = ~count,
                  source = "plot_y") %>%
      add_bars(y = ~count) %>%
      add_bars(y = ~count2) %>%
      layout(barmode = "stack")

    p2 <- plot_ly(dt[quarter == "2019 Q4"],
                  x = ~type,
                  # y = ~count,
                  source = "plot_y")%>%
      add_bars(y = ~count) %>%
      add_bars(y = ~count2)%>%
      layout(barmode = "stack")

    p3 <- plot_ly(dt[quarter == "2019 Q3"],
                  x = ~type,
                  y = ~count,
                  source = "plot_y")%>%
      add_bars(y = ~count) %>%
      add_bars(y = ~count2)%>%
      layout(barmode = "stack")
list_p <- list(p1, p2, p3)
    subplot(list_p, shareY = TRUE)
  })

  observe({
    click <- event_data("plotly_click", source = "plot_y")
    req(click)
    print(click)
  })
}

# Run the application
shinyApp(ui = ui, server = server)


1 Ответ

1 голос
/ 23 марта 2020

Не думаю, что вы можете добавить что-то вроде plotNumber к event_data, но вы можете использовать атрибут customdata или key для передачи дополнительной информации event_data.

Вот обновленная функция сервера, использующая customdata:

# Define server logic required to draw a histogram
server <- function(input, output) {

  output$plot <- renderPlotly({
    p1 <- plot_ly(dt[quarter == "2020 Q1"],
                  x = ~type,
                  y = ~count,
                  customdata='p1',
                  source = "plot_y") %>%
      add_bars(y = ~count) %>%
      add_bars(y = ~count2) %>%
      layout(barmode = "stack")

    p2 <- plot_ly(dt[quarter == "2019 Q4"],
                  x = ~type,
                  customdata='p2',
                  # y = ~count,
                  source = "plot_y")%>%
      add_bars(y = ~count) %>%
      add_bars(y = ~count2)%>%
      layout(barmode = "stack")

    p3 <- plot_ly(dt[quarter == "2019 Q3"],
                  x = ~type,
                  y = ~count,
                  customdata='p3',
                  source = "plot_y")%>%
      add_bars(y = ~count) %>%
      add_bars(y = ~count2)%>%
      layout(barmode = "stack")
    list_p <- list(p1, p2, p3)
    subplot(list_p, shareY = TRUE)
  })

  observe({
    click <- event_data("plotly_click", source = "plot_y")
    req(click)
    print(click)
  })
}

Вывод:

  curveNumber pointNumber   x  y customdata
1           4           1 Top 15         p3
...