[英]In Shiny/R how to synchronize two sets of tab panels?
我需要单击选项卡面板 label “面板 2”,右侧会显示“面板右侧图表 2”上的 plot(带有绿线的图表)。
贝娄是我的代码:
library(shiny)
ui <- fluidPage(
column(
width = 6,
tabsetPanel(
tabPanel(
strong("Panel 1")
),
tabPanel(
strong("Panel 2")
),
tabPanel(
strong("Panel 3")
))),
column(
width = 6,
tabsetPanel(
tabPanel(
strong("Panel Right Chart 1"),
plotOutput("chart1")
),
tabPanel(
strong("Panel Right Chart 2"),
plotOutput("chart2")
),
tabPanel(
strong("Panel Right Chart 3"),
plotOutput("chart3")
)))
)
server <- function(input, output, session) {
output$chart1 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'red')
})
output$chart2 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'green')
})
output$chart3 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'blue')
})
}
shinyApp(ui, server)
对 Silentdveildoll 的答案进行了一个小调整 - 我刚刚修改了observeEvent
调用,以便更新面板的逻辑没有任何if
语句,而只是更新到input$FirstTabs
中选择的任何内容。 这简化了代码,如果有多个选项卡,则可以更好地扩展。
library(shiny)
library(ggplot2)
ui <- fluidPage(
column(
width = 6,
tabsetPanel(id = "FirstTabs",
tabPanel(value = 1,
strong("Panel 1")
),
tabPanel(value = 2,
strong("Panel 2")
),
tabPanel(value = 3,
strong("Panel 3")
))),
column(
width = 6,
tabsetPanel(id = "SecondTabs",
tabPanel(value = "1",
strong("Panel Right Chart 1"),
plotOutput("chart1")
),
tabPanel(value = "2",
strong("Panel Right Chart 2"),
plotOutput("chart2")
),
tabPanel(value = "3",
strong("Panel Right Chart 3"),
plotOutput("chart3")
)))
)
server <- function(input, output, session) {
output$chart1 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'red')
})
output$chart2 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'green')
})
output$chart3 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'blue')
})
observeEvent(input$FirstTabs, {
updateTabsetPanel(session, "SecondTabs",
selected = input$FirstTabs)
})
}
shinyApp(ui, server)
正如@DanAdams 指出的那样,你用劳拉回应, updateTabsetPanel
是关键。 当我过去这样做时,我会使用observeEvent
,只要选择了第一组选项卡上的选项卡,它就会使用相应的选择更新第二组选项卡。 这是您的代码:
library(shiny)
library(ggplot2)
ui <- fluidPage(
column(
width = 6,
tabsetPanel(id = "FirstTabs",
tabPanel(value = 1,
strong("Panel 1")
),
tabPanel(value = 2,
strong("Panel 2")
),
tabPanel(value = 3,
strong("Panel 3")
))),
column(
width = 6,
tabsetPanel(id = "SecondTabs",
tabPanel(value = "1",
strong("Panel Right Chart 1"),
plotOutput("chart1")
),
tabPanel(value = "2",
strong("Panel Right Chart 2"),
plotOutput("chart2")
),
tabPanel(value = "3",
strong("Panel Right Chart 3"),
plotOutput("chart3")
)))
)
server <- function(input, output, session) {
output$chart1 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'red')
})
output$chart2 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'green')
})
output$chart3 <- renderPlot({
ggplot(mtcars,aes(cyl,mpg)) + geom_line(color = 'blue')
})
observeEvent(input$FirstTabs, {
if(input$FirstTabs == "1") {
updateTabsetPanel(session, "SecondTabs",
selected = "1")
}
if(input$FirstTabs == "2") {
updateTabsetPanel(session, "SecondTabs",
selected = "2")
}
if(input$FirstTabs == "3") {
updateTabsetPanel(session, "SecondTabs",
selected = "3")
}
})
}
shinyApp(ui, server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.