如何在闪亮的仪表板中隐藏或显示图表基于RadiGroupButton选择的Body [英] How to hide or display charts in shiny dashboardBody based on radioGroupButton selection

查看:0
本文介绍了如何在闪亮的仪表板中隐藏或显示图表基于RadiGroupButton选择的Body的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建具有以下结构的仪表板。它的基本结构有3个级别(菜单、子菜单和单选分组按钮选择) 侧边栏: 菜单1:有2个子菜单(子菜单1和子菜单2) Menu2有2个子菜单(子菜单3和子菜单4) 正文包含有两个选项的单选组按钮

dashBoardBody: 单选按钮:选项1和选项2

因此,当用户单击 子菜单1并点击选项1,然后我需要显示#A1 子菜单1并单击选项2,然后我需要显示#A2

子菜单2并单击选项1,然后我需要显示#A3 子菜单2并点击选项2,然后我需要显示#A4 子菜单3和4也是如此。

我希望#A1...A8根据选项1或选项2上的选择隐藏或显示。 我不知道如何显示或隐藏流体行(#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)

给出以下输出:

您可以添加皮肤并将其展开。 此外,是的,您可以在给定的选项卡中添加一大堆项目。例如,您可以输出绘图、数据表、ui输出等,如下所示。

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

         plotlyOutput("plot11", height=750),

         DT::dataTableOutput("testtable3")

         uiOutput("saveplotsbtn1"))

这篇关于如何在闪亮的仪表板中隐藏或显示图表基于RadiGroupButton选择的Body的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆