如何根据 radioGroupButton 选择在闪亮的 dashboardBody 中隐藏或显示图表
How to hide or display charts in shiny dashboardBody based on radioGroupButton selection
我正在尝试使用以下结构创建此仪表板。它的基本结构有 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
Sub Menu1 并点击 Choice 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)
给出此输出:
您可以添加皮肤并展开它。
另外,是的,您可以在给定的选项卡中添加一堆项目。比如可以输出plot、datatable、uiOutput等,如下图
tabPanel("Plot", value="tab3",
plotlyOutput("plot11", height=750),
DT::dataTableOutput("testtable3")
uiOutput("saveplotsbtn1"))
我正在尝试使用以下结构创建此仪表板。它的基本结构有 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 Sub Menu1 并点击 Choice 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)
给出此输出:
您可以添加皮肤并展开它。 另外,是的,您可以在给定的选项卡中添加一堆项目。比如可以输出plot、datatable、uiOutput等,如下图
tabPanel("Plot", value="tab3",
plotlyOutput("plot11", height=750),
DT::dataTableOutput("testtable3")
uiOutput("saveplotsbtn1"))