防止R闪亮UI中的占位符空间



我正在编程一个闪亮的应用程序,其中一个复选框组作为输入,作为输出,将有相同数量的类似选择的绘图。

  • 勾选选项1将显示绘图1
  • 勾选选项2将显示绘图2
  • 勾选选项3将显示绘图3

但当我只勾选选项2和3时,输出区域中会留下一些空间,当勾选选项1时,将显示图1。还有这个我不想拥有的白色区域。剩下的地块应该被抬高。

如何防止输出区域出现空白?我想我必须在ui mainPanel区域做一些编码,但我什么都没找到。所以我希望你能帮我解决这个问题。非常感谢!

我的应用程序代码示例。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)

您可以使用conditionalPanel来"隐藏"输出(注意,条件是JS而不是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)

最新更新