You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Quarto Tabset Panel选中标签页名称并动态更新图表

解决Quarto Shiny仪表盘标签页动态切换数据集的问题

实现思路

Quarto的panel-tabset基于Bootstrap标签页实现,我们可以通过JavaScript监听标签页切换事件,将当前激活的标签页ID传递给Shiny输入对象,再在服务器端根据这个值切换对应数据集。

修改后的完整代码

---
title: "panel-tabset"
format: dashboard
server: shiny
---

```{r}
#| context: setup
data(trees)
data(mtcars)

Input {.sidebar}
::: panel-tabset
::: {#tab-mtcars}
mtcars
selectInput("axis_x_mtcars",
"axis x",
choices = names(mtcars),
selected = names(mtcars)[1]
)

selectInput("axis_y_mtcars",
"axis y",
choices = names(mtcars),
selected = names(mtcars)[4]
)
:::

::: {#tab-trees}
trees
selectInput("axis_x_trees",
"axis x",
choices = names(trees),
selected = names(trees)[1]
)

selectInput("axis_y_trees",
"axis y",
choices = names(trees),
selected = names(trees)[2]
)
:::
:::

Plot
plotOutput("plot_data")

#| context: server
library(ggplot2)
library(dplyr)

dataset <- reactive({
  active_tab <- input$active_tab
  
  if (active_tab == "tab-mtcars") {
    mtcars %>%
      select(x = .data[[input$axis_x_mtcars]],
             y = .data[[input$axis_y_mtcars]])
  } else {
    trees %>%
      select(x = .data[[input$axis_x_trees]],
             y = .data[[input$axis_y_trees]])
  }
})

output$plot_data <- renderPlot({
  ggplot(dataset(), aes(x, y)) +
    geom_point()
})
// 监听标签页切换,传递激活状态到Shiny
$(document).on('shown.bs.tab', 'a[data-bs-toggle="tab"]', function(e) {
  var activeTabId = $(e.target).attr('href').substring(1);
  Shiny.setInputValue('active_tab', activeTabId);
});

// 初始化时设置默认激活标签页
$(document).ready(function() {
  var initialActiveTab = $('.nav-tabs .active a').attr('href').substring(1);
  Shiny.setInputValue('active_tab', initialActiveTab);
});
## 关键修改说明
- 给每个标签页区块添加唯一ID(`#tab-mtcars`、`#tab-trees`),确保能精准识别激活标签
- 新增JavaScript代码:
  - 监听Bootstrap标签页的切换事件,实时将激活标签ID传给Shiny的`input$active_tab`
  - 页面加载完成后主动传递初始激活标签,避免启动时无数据
- 服务器端通过`input$active_tab`判断当前标签,切换对应数据集;使用`.data[[input$xxx]]`规避dplyr非标准求值问题

内容的提问来源于stack exchange,提问作者Erik De Luca
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:52:04