Добавьте событие клика в блестящее приложение с 2 графиками SunburstR

Я хочу добавить событие клика в блестящее приложение, которое имеет 2 графика sund2b на странице. Я хотел бы, чтобы текстовый вывод был просто связан с тем сюжетом, который они щелкнули последним, однако, похоже, он реагирует только на первый сюжет, а не на второй. Результат отличный для одного, но я хотел бы, чтобы он работал для обоих. Это упрощенный пример того, что у меня есть:


library(shiny)
library(sunburstR)

sequences <- read.csv(
    system.file("examples/visit-sequences.csv",package="sunburstR")
    ,header = FALSE
    ,stringsAsFactors = FALSE
)[1:200,]
sequences2 <- read.csv(
    system.file("examples/visit-sequences.csv",package="sunburstR")
    ,header = FALSE
    ,stringsAsFactors = FALSE
)[201:400,]

server <- function(input,output,session){
    #sunburst1
    output$sunburst <- renderSund2b({
        add_shiny(sund2b(sequences))
    })
    #sunburst2
    output$sunburst2 <- renderSund2b({
        add_shiny(sund2b(sequences2))
    })
    #sunburst click event
    selection <- reactive({
        input$sunburst_click
    })
    output$selection <- renderText(selection())
    
}
ui<-fluidPage(
    sidebarLayout(
        sidebarPanel(
        ),
        # plot sunburst
        mainPanel(
            sund2bOutput("sunburst"),
            sund2bOutput("sunburst2"),
            textOutput("selection")
        )
    )
)
shinyApp(ui = ui, server = server)

person Walleo    schedule 04.02.2021    source источник


Ответы (1)


Имя ввода события клика зависит от имени вывода (input$sunburst2_click вместо output$sunburst2).

Пожалуйста, проверьте следующее:

library(shiny)
library(sunburstR)

sequences <- read.csv(
  system.file("examples/visit-sequences.csv", package = "sunburstR"),
  header = FALSE,
  stringsAsFactors = FALSE
)[1:200,]
sequences2 <- read.csv(
  system.file("examples/visit-sequences.csv", package = "sunburstR"),
  header = FALSE,
  stringsAsFactors = FALSE
)[201:400,]

ui <- fluidPage(sidebarLayout(
  sidebarPanel(),
  # plot sunburst
  mainPanel(
    sund2bOutput("sunburst"),
    sund2bOutput("sunburst2"),
    textOutput("selection"),
    textOutput("selection2"),
    textOutput("selectionLatest")
  )
))

server <- function(input, output, session) {
  #sunburst1
  output$sunburst <- renderSund2b({
    add_shiny(sund2b(sequences))
  })
  #sunburst2
  output$sunburst2 <- renderSund2b({
    add_shiny(sund2b(sequences2))
  })
  #sunburst click event
  selection <- reactive({
    input$sunburst_click
  })
  selection2 <- reactive({
    input$sunburst2_click
  })
  
  latestClick <- reactiveVal()
  
  observeEvent(input$sunburst_click, {
    latestClick(input$sunburst_click)
  })
  
  observeEvent(input$sunburst2_click, {
    latestClick(input$sunburst2_click)
  })
  
  output$selection <- renderText(paste("plot 1:", paste(selection(), collapse = " - ")))
  output$selection2 <- renderText(paste("plot 2:", paste(selection2(), collapse = " - ")))
  output$selectionLatest <- renderText(paste("plot 1 or 2:", paste(latestClick(), collapse = " - ")))
}

shinyApp(ui = ui, server = server)

результат

Здесь можно найти официальный пример.

person ismirsehregal    schedule 04.02.2021