我想创建一个gt表,在其中将两列中的数值显示在一个单元格中,但只根据其中一列的值对单元格进行着色。
例如,使用ToothGrowth
示例数据,我想将len
和dose
列放在一个单元格中,但用dose
的值为单元格背景着色。
我尝试手动创建一个颜色矢量来为len_dose
列着色,但这不起作用,因为它似乎是在将颜色矢量重新应用到len_dose
的每个不同级别,而不是dose
。我猜您可以使用tab_style()
手动格式化单元格,但这似乎效率低下,并且没有提供文本颜色更改以最大化对比度的良好功能背景。我不知道一个有效的方法来做到这一点。
我尝试了:
library(gt)
library(dplyr)
library(scales)
library(glue)
# Manually map dose to color
dose_colors <- col_numeric(palette = 'Reds', domain = range(ToothGrowth$dose))(ToothGrowth$dose)
ToothGrowth %>%
mutate(len_dose = glue('{len}: ({dose})')) %>%
gt(rowname_col = 'supp') %>%
cols_hide(c(len, dose)) %>%
data_color(len_dose, colors = dose_colors)
输出(不好,因为未按剂量着色):
2条答案
按热度按时间slmsl1lt1#
不知道你是否找到了解决这个问题的办法,但以下是我所做的:
tab_style()
,你不需要尝试创建颜色矢量,而是可以根据dose
列设置你想要的背景颜色。如果你想根据dose
给值不同的颜色,除了我在这里已经着色的,然后为所需的值创建另一个tab_style()
。ztmd8pv52#
更新日期:2023年2月
gt
包中添加了基于另一列的颜色选项-data_color()
获得了一个taregt_columns
参数,因此这变得简单多了:过时
我也遇到了同样的问题,并调整了gt::data_color函数,使其接受单独的源列和目标列--这样,下面的代码就可以产生所需的输出。
创建于2022年11月3日,使用reprex v2.0.2