如何在非嵌入Shiny的R Markdown中用DT选中列生成绘图?
在Shiny Runtime的R Markdown中实现选列绘图
当然可以实现,关键在于给DT表格绑定明确的outputId,这样就能通过input对象捕获选中的列,不用嵌入完整Shiny应用。下面是修改后的完整示例代码:
--- title: "Test" output: flexdashboard::flex_dashboard: theme: bootstrap orientation: rows runtime: shiny --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(shiny) library(flexdashboard) library(DT) library(highcharter)
Info {.sidebar data-width=300}
选择表格中的一列,上方会自动生成对应箱线图
Row
动态绘图
# 渲染绘图,响应列选择 renderHighchart({ # 获取选中列的索引,默认选第一列 selected_col <- input$mtcars_table_columns_selected %||% 1 col_name <- colnames(mtcars)[selected_col] # 用highcharter生成箱线图,以mpg为分组,选中列为数值 highchart() %>% hc_add_series( data = mtcars, type = "boxplot", hcaes(x = factor(mpg), y = .data[[col_name]]) ) %>% hc_title(text = paste("箱线图:", col_name, " vs mpg")) })
Row
mtcars表格
# 先定义输出容器,指定outputId为mtcars_table dataTableOutput("mtcars_table") # 渲染表格,绑定到上面的outputId output$mtcars_table <- renderDataTable( mtcars, selection = list(mode = "single", target = "column"), options = list(scrollX = TRUE) )
### 关键说明: - 之前直接用`renderDataTable`没绑定outputId,所以没有对应的`input$xxx_columns_selected`变量。现在添加`dataTableOutput("mtcars_table")`作为输出容器,再用`output$mtcars_table`绑定渲染逻辑,就能正常捕获列选择事件。 - 绘图部分用`renderHighchart`(换成`renderPlot`生成基础绘图也可以)监听`input$mtcars_table_columns_selected`,动态获取选中列名并生成图表。 - `%||%`是Shiny里的运算符,用来处理初始状态(还没选列时默认用第一列),避免空值报错。 这样就能在Shiny Runtime的R Markdown里实现选列绘图,完全不需要嵌入完整Shiny应用。 内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

