如何在Shiny中使用gt包创建可响应式表格(替代DT包)
解决方案:在Shiny中结合gt包实现响应式表格(保留样式)
以下是完整的实现代码,既保留了你原有的gt表格美观特性,又添加了针对manufacturer、trans、class和displ的响应式筛选交互:
library(shiny) library(tidyverse) library(gt) library(gtExtras) ui <- fluidPage( titlePanel("Cars data set"), sidebarLayout( sidebarPanel( width = 3, # 制造商筛选(支持多选) selectInput( inputId = "manufacturer", label = "选择品牌", choices = unique(mpg$manufacturer), selected = unique(mpg$manufacturer), multiple = TRUE ), # 变速箱类型筛选(支持多选) selectInput( inputId = "trans", label = "选择变速箱类型", choices = unique(mpg$trans), selected = unique(mpg$trans), multiple = TRUE ), # 车型分类筛选(支持多选) selectInput( inputId = "class", label = "选择车型", choices = unique(mpg$class), selected = unique(mpg$class), multiple = TRUE ), # 发动机排量范围筛选 sliderInput( inputId = "displ_range", label = "发动机排量范围", min = min(mpg$displ), max = max(mpg$displ), value = c(min(mpg$displ), max(mpg$displ)), step = 0.1 ) ), mainPanel( width = 9, gt_output(outputId = "Table") ) ) ) server <- function(input, output) { # 创建响应式过滤数据集 filtered_data <- reactive({ mpg |> filter( manufacturer %in% input$manufacturer, trans %in% input$trans, class %in% input$class, displ >= input$displ_range[1], displ <= input$displ_range[2] ) |> group_by(manufacturer) }) # 动态生成带样式的gt表格 output$Table <- render_gt({ filtered_data() |> gt() |> gt_theme_nytimes() |> gt_highlight_rows( rows = class == "suv", fill = "#D3B1E0", bold_target_only = TRUE, target_col = class ) |> fmt_number( columns = displ, decimals = 2, use_seps = FALSE ) |> gt_plt_bar(column = displ, keep_column = FALSE, width = 45, color = "#800080", scale_type = "number") |> tab_header( title = "Cars data set" ) |> cols_label( manufacturer = "Brand", trans = "Type of transmission", class = "Type of car", displ = "Engine Displacement" ) }) } # Run the application shinyApp(ui = ui, server = server)
关键实现说明:
- 响应式数据驱动:通过
reactive()创建filtered_data对象,它会自动监听输入控件的变化,实时输出符合筛选条件的数据集。 - 动态表格渲染:将原有的gt样式代码移入
render_gt()函数内,确保每次数据更新时,都会重新生成带有完整样式的表格,完全保留你需要的美观特性。 - 匹配控件类型:针对分类字段使用支持多选的
selectInput,针对数值型排量字段使用sliderInput实现范围筛选,贴合数据类型优化交互体验。 - 样式完全保留:原有的主题、行高亮、数值格式化、条形图等gt自定义设置全部保留,未做任何删减。
内容的提问来源于stack exchange,提问作者Stats Iliterate
相关产品推荐
相关产品推荐

