shiny - 如何根据 radioGroupButton 选择在 Shiny 的 dashboardBody 中隐藏或显示图表

标签 shiny shinydashboard shiny-server shinyapps shiny-reactivity

我正在尝试使用以下结构创建此仪表板。它的基本结构有 3 个级别(菜单、子菜单和 radioGroupButton 选择) 边栏: Menu1:有2个子菜单​​(Sub Menu 1和Sub Menu2) Menu2 有 2 个子菜单(Sub Menu 3 和 Sub Menu4) body 有 radioGroupButton 有 2 个选择

仪表板主体: RadioGroupButton:选项 1 和选项 2

所以当用户点击 Sub Menu1 并单击 Choice 1 然后我需要显示 #A1 子菜单 1 并单击选择 2 然后我需要显示 #A2

Sub Menu2 并点击 Choice 1 然后我需要显示 #A3 Sub Menu2 并单击 Choice 2 然后我需要显示 #A4 同样适用于子菜单 3 和 4。

我希望#A1...A8 根据选项 1 或选项 2 上的选择隐藏或显示。 我不知道如何显示或隐藏 fluidRows (#A1- #A8)。请指教。

`shinyApp(
ui= dashboardPagePlus(skin="purple-light",dashboardHeader(title="Testing"),
dashboardSidebar(width=200,
sidebarMenu(
menuItem("Menu1", tabName = "dashboard",startExpanded = TRUE,
menuSubItem("Sub Menu1", tabName = "sub1"),
menuSubItem("Sub Menu2", tabName = "sub2")),
menuItem("Menu2", tabName= "Widgets",startExpanded = TRUE,
menuSubItem("Sub Menu3", tabName = "sub3"),
menuSubItem("Sub Menu4", tabName = "sub4")))),

dashboardBody(radioGroupButtons("rb1",label=NULL, choices = c("choice1","choice2"), selected= 
"choice1",individual= TRUE,status="info", justified= TRUE ,direction= "horizontal"),

tabItems(
tabItem("sub1",title= "Tab1",
fluidRow(plotOutput("plotgraph1")), #A1
fluidRow(plotOutput("plotgraph2"))), #A2

tabItem("sub2", title= "Tab2",
fluidRow(plotOutput("plotgraph3")), #A3
fluidRow(plotOutput("plotgraph1"))), #A4

tabItem("sub3", title= "Tab3",
fluidRow(plotOutput("plotgraph3")), #A5
fluidRow(plotOutput("plotgraph2"))), #A6

tabItem("sub4", title= "Tab4",
fluidRow(plotOutput("plotgraph1")), #A7
fluidRow(plotOutput("plotgraph1")) )))), #A8

server = function(input,output){
set.seed(1234)
pt1 <- qplot(rnorm(500),fill=I("red"),binwidth=0.2,title="plotgraph1")
pt3 <- qplot(rnorm(600),fill=I("blue"),binwidth=0.2,title="plotgraph3")
pt2 <- reactive({input$rb1
if (input$rb1 =="choice1"){
return(qplot(rnorm(500),fill=I("blue"),binwidth=0.2,title="plotgraph2"))
} else {
return(NULL)
}
})
output$plotgraph1 = renderPlot({pt1})
output$plotgraph2 = renderPlot({pt2()})
output$plotgraph3 = renderPlot({pt3})
})

)`

最佳答案

为了演示目的,我已经实现了一个子菜单。您可以类似地扩展到其他人。你们非常亲密。

以下代码:

ui <-  dashboardPage(#skin="purple-light",
                     dashboardHeader(title="Testing"),
                      dashboardSidebar(width=200,
                                       sidebarMenu(
                                         menuItem("Menu1", tabName = "dashboard",startExpanded = TRUE,
                                                  menuSubItem("Sub Menu1", tabName = "sub1"),
                                                  menuSubItem("Sub Menu2", tabName = "sub2")),
                                         menuItem("Menu2", tabName= "Widgets",startExpanded = TRUE,
                                                  menuSubItem("Sub Menu3", tabName = "sub3"),
                                                  menuSubItem("Sub Menu4", tabName = "sub4")))),
                      
                      dashboardBody(radioGroupButtons("rb1",label=NULL, choices = c("choice1","choice2"), selected= 
                                                        "choice1",individual= TRUE,status="info", justified= TRUE ,direction= "horizontal"),
                                    
                                    tabItems(
                                      tabItem("sub1",title= "Tab1",
                                              #fluidRow(plotOutput("plotgraph1")), #A1
                                              fluidRow(plotOutput("plotgraph2"))) #A2
                                      
                                      # tabItem("sub2", title= "Tab2",
                                      #         fluidRow(plotOutput("plotgraph3")), #A3
                                      #         fluidRow(plotOutput("plotgraph1"))), #A4
                                      # 
                                      # tabItem("sub3", title= "Tab3",
                                      #         fluidRow(plotOutput("plotgraph3")), #A5
                                      #         fluidRow(plotOutput("plotgraph2"))), #A6
                                      # 
                                      # tabItem("sub4", title= "Tab4",
                                      #         fluidRow(plotOutput("plotgraph1")), #A7
                                      #         fluidRow(plotOutput("plotgraph1")) ) #A8
                                      ))) #A8

server <- function(input,output){
  set.seed(1234)
  pt1 <- qplot(rnorm(500),fill=I("red"),binwidth=0.2,title="plotgraph1")
  pt3 <- qplot(rnorm(600),fill=I("blue"),binwidth=0.2,title="plotgraph3")
  pt2 <- reactive({
    req(input$rb1)
    if (input$rb1 =="choice1"){
      return(qplot(rnorm(500),fill=I("blue"),binwidth=0.2,title="plotgraph1"))
    }else if (input$rb1 =="choice2") {
      return(qplot(rnorm(500),fill=I("red"),binwidth=0.2,title="plotgraph2"))
    }else {return(NULL)}
  })
  output$plotgraph1 = renderPlot({pt1})
  output$plotgraph2 = renderPlot({pt2()})
  output$plotgraph3 = renderPlot({pt3})
}

shinyApp(ui, server)

给出这个输出:

output

您可以添加皮肤并展开它。 另外,是的,您可以在给定的选项卡中添加一堆项目。比如可以输出plot、datatable、uiOutput等,如下图。

tabPanel("Plot", value="tab3", 

         plotlyOutput("plot11", height=750),

         DT::dataTableOutput("testtable3")

         uiOutput("saveplotsbtn1"))

关于shiny - 如何根据 radioGroupButton 选择在 Shiny 的 dashboardBody 中隐藏或显示图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63045963/

相关文章:

r - Shiny 的仪表板主板高度问题

r - Shiny :在操作按钮单击时显示 mainPanel

r - 为什么 Shiny 应用程序在一段时间不使用时会断开连接?

r - 运行 R 的 Docker 容器中的 "file ' .Renviron ' cannot be opened for reading"

r - 如何更改 slider 输入值的大小shinydashboard

r - 在 R Shiny 中将传单 map 缩放为默认值

r - 使用 for 循环动态调用 Shiny 模块多次

r - 如何在 Shiny 中为侧边栏面板添加滚动条?

R Shiny 加载工作区

r - (R shiny) 使用 ggsave (ggplot2) 将图保存到选择的位置