Estoy programando una aplicación brillante con un grupo de casillas de verificación como entrada y como salida habrá el mismo número de gráficos como opciones.

  • Al marcar la opción 1, se muestra el gráfico 1
  • Al marcar la opción 2, se muestra el gráfico 2
  • Al marcar la opción 3, se muestra el gráfico 3

Pero cuando marque solo las opciones 2 y 3, quedará algo de espacio en el área de salida donde se mostrará el gráfico 1 cuando esté marcada con la opción 1. Y esta área blanca no quiero tener. Las parcelas restantes deben levantarse.

¿Cómo puedo evitar que haya espacios en blanco en el área de salida? Creo que tengo que hacer algo de codificación en el área de mainPanel de la interfaz de usuario, pero no he encontrado nada. Así que espero que puedas ayudarme con mi problema. ¡Muchas gracias de antemano!

Mi ejemplo de código de app.R:

fluidPage(
    
  sidebarLayout(

    sidebarPanel(

       # Group of checkboxes
       checkboxGroupInput("checkGroup", label = h3("Checkbox group"), 
         choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3),
         selected = 1)

    ),

    mainPanel(

      # Must I do here my codeing to prevent the (white) placeholder for the not shown plot?
      plotOutput("plot_Choice1"),
      plotOutput("plot_Choice2"),
      plotOutput("plot_Choice3")

   )
 ) 
)

server <- function(input, output) {

    # Rendering the first plot
    output$plot_Choice1=renderPlot({
        req(input$checkGroup)
        if (any(input$checkGroup == 1)) {
            plot(1:10,main="Plot for choice 1")
        }
    })

    # Rendering the second plot
    output$plot_Choice2=renderPlot({
        req(input$checkGroup)
        if (any(input$checkGroup == 2)) {
        plot(10:20,main="Plot for choice 2")
        }
    })

    # Rendering the third plot
    output$plot_Choice3=renderPlot({
        req(input$checkGroup)
        if (any(input$checkGroup == 3)) {
        plot(20:30,main="Plot for choice 3")
        }
    })



}

# Create Shiny app ----
shinyApp(ui = ui, server = server)
2
tueftla 26 ago. 2020 a las 16:18

1 respuesta

La mejor respuesta

Puede usar conditionalPanel para 'ocultar' la salida (tenga en cuenta que la condición es código JS, no R):

ui <- fluidPage(
  
  sidebarLayout(
    
    sidebarPanel(
      
      # Group of checkboxes
      checkboxGroupInput("checkGroup", label = h3("Checkbox group"), 
                         choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3),
                         selected = 1)
      
    ),
    
    mainPanel(
      conditionalPanel("input.checkGroup.includes('1')", plotOutput("plot_Choice1")),
      conditionalPanel("input.checkGroup.includes('2')", plotOutput("plot_Choice2")),
      conditionalPanel("input.checkGroup.includes('3')", plotOutput("plot_Choice3"))
    )
  ) 
)

server <- function(input, output) {
  
  # Rendering the first plot
  output$plot_Choice1=renderPlot({
    req(input$checkGroup)
    if (any(input$checkGroup == "1")) {
      plot(1:10, main = "Plot for choice 1")
    }
  })
  
  # Rendering the second plot
  output$plot_Choice2=renderPlot({
    req(input$checkGroup)
    if (any(input$checkGroup == "2")) {
      plot(10:20, main = "Plot for choice 2")
    }
  })
  
  # Rendering the third plot
  output$plot_Choice3=renderPlot({
    req(input$checkGroup)
    if (any(input$checkGroup == "3")) {
      plot(20:30, main = "Plot for choice 3")
    }
  })
  
  
  
}

# Create Shiny app ----
shinyApp(ui = ui, server = server)
2
ismirsehregal 26 ago. 2020 a las 13:43