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

如何在gt表格分组表头中使用text_transform添加图片

解决gt表格分组表头添加国旗并保留国家名称的问题

你之前的调整代码存在两个核心问题:

  • 将groupname_col设为flag_URL,导致分组表头显示的是国旗URL而非国家名称
  • text_transform仅返回国旗图片,未将国家名称与图片拼接展示

以下是修正后的完整代码,可实现分组表头同时显示国旗和对应国家名称:

library(gt)
library(dplyr)
library(purrr)

set.seed(1)

# 准备基础数据
city_dat <- data.frame(
  country = rep(c("United States", "United Kingdom", "Canada"), times = 1, each = 3),
  city = c("New York", "Washington", "Los Angeles",
           "London", "Manchester", "Liverpool",
           "Toronto", "Vancouver", "Halifax"),
  some_data = sample(10:40, size =9))

# 国旗URL映射表
country_flags <- data.frame(
  country = c("United States", "United Kingdom", "Canada"),
  flag_URL = c("https://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg", 
               "https://upload.wikimedia.org/wikipedia/commons/a/ae/Flag_of_the_United_Kingdom.svg",
               "https://upload.wikimedia.org/wikipedia/en/c/cf/Flag_of_Canada.svg"))

# 合并数据(无需调整列顺序)
city_dat <- city_dat %>% left_join(country_flags)

# 生成带国旗分组表头的gt表格
city_dat_gt <- city_dat %>%
  gt(
    rowname_col = "city",
    groupname_col = "country"  # 保留国家名称作为分组依据
  ) %>% 
  text_transform(
    locations = cells_row_groups(),
    fn = function(country_names) {
      # 遍历每个国家名称,匹配国旗并拼接展示内容
      map_chr(country_names, function(name) {
        # 获取当前国家对应的国旗URL
        flag_url <- country_flags$flag_URL[country_flags$country == name]
        # 拼接国旗图片和国家名称
        paste0(
          web_image(url = flag_url, height = 12),
          " ", name
        )
      })
    }
  ) %>% 
  cols_hide(columns = flag_URL)  # 隐藏不需要显示的flag_URL列

关键逻辑说明

  1. 保留分组列:始终用country作为groupname_col,确保分组表头初始值为国家名称
  2. 拼接内容:在text_transform中,为每个国家名称匹配对应国旗URL,生成图片HTML代码后与国家名称拼接,实现"国旗+名称"的分组表头效果
  3. 清理冗余列:用cols_hide隐藏flag_URL列,避免表格主体出现多余内容

内容的提问来源于stack exchange,提问作者rainbird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:45:28