如何在gt表格中自定义行组标签(含上下标、换行)及样式调整
问题解决:gt表格行组HTML解析、垂直居中与加粗设置
问题分析
行组标签的HTML未解析、行组列未垂直居中、标签未加粗,核心原因是gt默认将行组标签视为纯文本,且未配置对应样式。
修正方案(两种实现方式)
方式一:使用Markdown语法(推荐,更简洁)
修正后的完整代码:
library(gt) library(dplyr) # 生成第一组数据 a <- rnorm(21, mean = 112, sd = 12) colour <- rep(c("Blue", "Red", "Green"), 7) data <- data.frame(colour, a) %>% group_by(colour) %>% summarise(mean = mean(a), sd = sd(a), n = n()) %>% mutate(grp = "[H~2~O]") %>% # Markdown下标语法 rename(cat = colour) # 生成第二组数据(修正原代码中误用mean(a)的错误) b <- rnorm(21, mean = 60, sd = 12) day <- rep(c("2", "4", "6"), 7) data2 <- data.frame(day, b) %>% group_by(day) %>% summarise(mean = mean(b), sd = sd(b), n = n()) %>% mutate(grp = "[H~2~O] Addition \n(Days)") %>% # Markdown换行(两个空格+回车) rename(cat = day) # 构建带样式的gt表格 bind_rows(data, data2) %>% gt(rowname_col = "cat") %>% # 将行组转为单独列 tab_options(row_group.as_column = TRUE) %>% # 解析行组标签为Markdown,同时添加加粗效果 opt_row_groups( label_fn = function(x) md(paste0("**", x, "**")) ) %>% # 设置行组标签垂直居中 tab_style( style = cell_text(align = "center", v_align = "middle"), locations = cells_row_groups() ) %>% # 可选:设置行组列标题居中 tab_style( style = cell_text(align = "center"), locations = cells_column_labels(columns = "row_group") )
方式二:使用HTML语法
如果偏好HTML标签,可采用以下代码:
library(gt) library(dplyr) # 生成第一组数据 a <- rnorm(21, mean = 112, sd = 12) colour <- rep(c("Blue", "Red", "Green"), 7) data <- data.frame(colour, a) %>% group_by(colour) %>% summarise(mean = mean(a), sd = sd(a), n = n()) %>% mutate(grp = "<strong>[H<sub>2</sub>O]</strong>") %>% # HTML加粗+下标 rename(cat = colour) # 生成第二组数据(修正原代码错误) b <- rnorm(21, mean = 60, sd = 12) day <- rep(c("2", "4", "6"), 7) data2 <- data.frame(day, b) %>% group_by(day) %>% summarise(mean = mean(b), sd = sd(b), n = n()) %>% mutate(grp = "<strong>[H<sub>2</sub>O] Addition <br> (Days)</strong>") %>% # HTML换行+加粗 rename(cat = day) # 构建表格 bind_rows(data, data2) %>% gt(rowname_col = "cat") %>% tab_options(row_group.as_column = TRUE) %>% # 解析行组标签中的HTML opt_row_groups(label_fn = html) %>% # 设置行组标签垂直居中 tab_style( style = cell_text(align = "center", v_align = "middle"), locations = cells_row_groups() )
关键要点
- HTML/Markdown解析:gt默认不解析行组标签的标记语言,必须通过
opt_row_groups(label_fn = html)或label_fn = md指定解析函数。 - 标签加粗:可直接在标签文本中加入Markdown的
**或HTML的<strong>,配合解析函数生效。 - 垂直居中:通过
tab_style()选中cells_row_groups(),设置v_align = "middle"实现行组标签垂直居中。
内容的提问来源于stack exchange,提问作者MM1
相关产品推荐
相关产品推荐

