flexdashboard中为gauge组件设置CSV驱动动态标题的实现方法
解决方法
方法1:使用R内联代码实现动态区块标题
你之前的写法不生效是因为没有使用R内联代码标记,把每个区块的标题行改成如下格式即可正常读取CSV中的标题:
### `r myData$myTitles[1]`
渲染时R会自动将内联代码的输出结果替换为区块标题。
方法2:直接为gauge组件添加内置标题
flexdashboard的gauge()函数原生支持label参数作为gauge的内置标题,你可以把区块标题留空,直接在gauge参数中定义标题:
修改后的单个gauge代码示例:
### ```{r} gauge( value = myData$myValues[1], label = myData$myTitles[1], # 此处设置gauge内置标题 min = 0, max = 6, gaugeSectors( success = c(0,2), warning = c(3,4), danger = c(5,6) ) )
进阶优化:批量生成所有gauge无需重复写代码
如果后续CSV会新增/减少指标,你可以用循环动态生成所有gauge,完全不用手动修改Rmd主体代码,团队只需要维护CSV文件即可:
完整示例代码如下:
--- title: "My dynamic gauges" output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill --- ```{r setup, include=FALSE} library(flexdashboard) library(readr) library(dplyr) library(purrr) # 读取外部CSV数据,团队仅需修改此文件 myData <- read_csv("mydata.csv") # 按每列2个指标拆分数据,适配三列布局 data_split <- split(myData, rep(1:3, each = 2, length.out = nrow(myData)))
# 批量生成三列内容 iwalk(data_split, function(col_data, col_idx) { # 输出列分隔与列标题 cat("Column \n-----------------------------------------------------------------------\n") cat(paste0("<h3> Column Name ", col_idx, " </h3>\n\n")) # 批量生成当前列的所有gauge pwalk(col_data, function(myTitles, myValues) { cat(paste0("### ", myTitles, "\n\n")) cat("```{r}\n") cat(sprintf("gauge(%s, min = 0, max = 6, gaugeSectors(success = c(0,2), warning = c(3,4), danger = c(5,6)))\n", myValues)) cat("```\n\n") }) })
内容的提问来源于stack exchange,提问作者Susan
相关产品推荐
相关产品推荐

