用户 select/multi 输入的多个独立图

Multiple Separate Plots on User select/multi input

我想根据用户输入可视化 plot/s。我有一个下拉菜单,如果用户 select 从给定的选项中选择一个或多个变量,代码会根据用户输入自动可视化每个变量的单独图表。

代码:我就是这样做的。如果还有其他方法,请提出。

library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(), #Necessary to activate shinyjs
    selectInput("select", "Select plot:", 1:4, multiple = TRUE),
    plotOutput("p1"),
    plotOutput("p2"),
    plotOutput("p3"),
    plotOutput("p4")
  ),
  server = function(input, output) {
    output$p1 <- renderPlot({ plot(iris) })
    output$p2 <- renderPlot({ plot(mtcars) })
    output$p3 <- renderPlot({ plot(0) })
    output$p4 <- renderPlot({ plot(1) })
    
    observeEvent(input$select, {
      req(input$select)
      shinyjs::toggle("p1", condition = input$select == 1)
      shinyjs::toggle("p2", condition = input$select == 2)
      shinyjs::toggle("p3", condition = input$select == 3)
      shinyjs::toggle("p4", condition = input$select == 4)
    })
    
  }
)

此代码的问题在于,当我 select 从下拉菜单中输入任何一个时,其他变量的所有其他图也会显示出来。 另外,当所有变量都被 selected 并且我尝试从下拉菜单中取消 select variable/s 时,它们不会隐藏。

请帮忙。谢谢

由于选择允许多选,所以您应该使用%in%而不是==
您还应该使用 observe 而不是 observeEvent 来对 NULL 输入做出反应。

library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(), #Necessary to activate shinyjs
    selectizeInput("select", "Select plot:", 1:4, multiple = TRUE),
    plotOutput("p1"),
    plotOutput("p2"),
    plotOutput("p3"),
    plotOutput("p4")
  ),
  server = function(input, output) {
    output$p1 <- renderPlot({ plot(iris) })
    output$p2 <- renderPlot({ plot(mtcars) })
    output$p3 <- renderPlot({ plot(0) })
    output$p4 <- renderPlot({ plot(1) })

    observe({
      shinyjs::toggle("p1", condition = isTRUE(1 %in% input$select))
      shinyjs::toggle("p2", condition = isTRUE(2 %in% input$select))
      shinyjs::toggle("p3", condition = isTRUE(3 %in% input$select))
      shinyjs::toggle("p4", condition = isTRUE(4 %in% input$select))
    })
    
  }
)