如何用R语言gt包依据表格内颜色名设置单元格颜色?
问题描述
我有一张附带颜色名称的数据表,希望将colA或colC列的单元格颜色设置为表中指定的颜色,优先使用gt包生成表格。示例代码如下:
library(gt) library(dplyr) df<- tribble( ~colA, ~colB, ~colC, "apple", 1, "green", "banana", 2, "yellow", "cherry", 3, "red" ) gt(df) |> tab_style( style = cell_text(font = system_fonts(name = "monospace-code")), locations = cells_body() ) |> cols_width(everything() ~ px(100)) |> tab_options(table_body.hlines.style = "all") |> cols_align("center") |> tab_style( style = list( cell_fill(color = "gray95"), cell_borders(sides = c("l", "r"), color = "gray50", weight = px(3)) ), locations = cells_body(columns = colB) )
我尝试参考gt官方文档中使用十六进制颜色的示例(见下图),但无法实现需求,甚至示例代码也报错。
解决方案
要实现根据表中指定颜色设置单元格填充色的需求,可以直接通过tab_style结合数据框中的颜色列值为每行指定对应样式,无需依赖可能版本不兼容的官方示例写法。以下是修改后的完整代码:
library(gt) library(dplyr) df<- tribble( ~colA, ~colB, ~colC, "apple", 1, "green", "banana", 2, "yellow", "cherry", 3, "red" ) gt(df) |> # 保留原有的基础样式设置 tab_style( style = cell_text(font = system_fonts(name = "monospace-code")), locations = cells_body() ) |> cols_width(everything() ~ px(100)) |> tab_options(table_body.hlines.style = "all") |> cols_align("center") |> tab_style( style = list( cell_fill(color = "gray95"), cell_borders(sides = c("l", "r"), color = "gray50", weight = px(3)) ), locations = cells_body(columns = colB) ) |> # 将colA列的单元格填充色设置为对应行colC的颜色 tab_style( style = cell_fill(color = df$colC), locations = cells_body(columns = colA, rows = 1:nrow(df)) ) |> # 可选:将colC列自身的单元格填充色设置为对应颜色值 tab_style( style = cell_fill(color = df$colC), locations = cells_body(columns = colC) )
说明
- 核心逻辑是通过
df$colC直接提取每行的颜色值,传递给cell_fill()的color参数 - 用
rows = 1:nrow(df)指定为每行单独应用对应颜色,确保颜色与行一一匹配 - 如果使用十六进制颜色值(比如
"#FF0000"代替"red"),该写法同样适用,只需将colC中的颜色名称替换为十六进制代码即可
内容的提问来源于stack exchange,提问作者jaysmith
相关产品推荐
相关产品推荐

