R Shiny如何通过侧边栏选择器切换展示表格数据与折线图
实现方案
你可以通过以下两种常用方案实现单选切换展示效果,第一种改动量最小,第二种可以无缝对接你想使用的switch逻辑:
方案1:UI层条件渲染(最小改动)
仅修改UI的mainPanel部分,用conditionalPanel根据选择值控制组件显示,不需要修改服务端代码:
ui <- fluidPage( sidebarLayout( sidebarPanel( pickerInput("viz_type","Select what you want to see", choices=(c("Tabular Data", "Line Plot")), selected="Tabular Data", options = list(`actions-box` = TRUE, `selected-text-format` = "count > 3"),multiple = F) ), mainPanel( # 仅选择折线图时展示绘图组件 conditionalPanel( condition = "input.viz_type == 'Line Plot'", plotOutput("myplot") ), # 仅选择表格时展示表格组件 conditionalPanel( condition = "input.viz_type == 'Tabular Data'", DTOutput("table") ) ) ) )
方案2:服务端动态渲染(适配switch逻辑)
如果需要用switch统一管理展示逻辑,可以通过服务端动态生成输出组件实现:
- 先修改UI的
mainPanel为动态输出接口:
mainPanel( uiOutput("dynamic_content") )
- 在服务端新增动态渲染逻辑,用
switch判断选择值返回对应组件:
server <- function(input, output) { compound_data <- reactive({ df }) output$table <- renderDT(compound_data()) myplot <- reactive({ df1 <- compound_data() gpl1 <- df1 %>% ggplot(aes(x = x, y = y)) + geom_line() # 你要折线图的话把原来的geom_point改成这个即可 gpl1 }) output$myplot <- renderPlot({ myplot() }) # 新增动态切换逻辑 output$dynamic_content <- renderUI({ switch(input$viz_type, "Tabular Data" = DTOutput("table"), "Line Plot" = plotOutput("myplot") ) }) }
两种方案都可以实现选择对应选项仅展示对应内容的效果。
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

