如何在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列
关键逻辑说明
- 保留分组列:始终用
country作为groupname_col,确保分组表头初始值为国家名称 - 拼接内容:在
text_transform中,为每个国家名称匹配对应国旗URL,生成图片HTML代码后与国家名称拼接,实现"国旗+名称"的分组表头效果 - 清理冗余列:用
cols_hide隐藏flag_URL列,避免表格主体出现多余内容
内容的提问来源于stack exchange,提问作者rainbird
相关产品推荐
相关产品推荐

