在gt表中为data_color设置非对称中点

问题描述

我正在尝试使用gt包从538重新创建一个简单表。我想使用0作为色阶域的中点并将其设置为白色,但0不是实际域的中点。

df <- tribble(
  ~SEASON,~ACC,~BIG_10,~BIG_12,~PAC_12,~SEC,2019,.02,-.05,.04,2018,-.06,.07,.01,2017,.05,-.04,.06,.16,2016,-.02,2015,-.03,2014,.14,-.01,.06
)

这是我试图做的事情

gt(df) %>%
  data_color(
    columns = 2:6,colors = scales::col_numeric(
      palette = c('#feb8cd','#ffffff','#69cfd5'),domain = c(-.06,.16)
    )
  )

Table

这不会设置刻度的中点,因为0.04之类的值仍然略带红色/粉红色。我想要那些是蓝色的。我基本上想要两个域,负值(红色到白色)和正值(白色到蓝色)有办法吗?

解决方法

看来scales::col_numeric并没有查看各个域值-它只是获得范围并将其平均划分。

您可以创建自己的函数,该函数调用两个col_numeric函数之一。

pal <- function(x) {
  f_neg <- scales::col_numeric(
    palette = c('#feb8cd','#ffffff'),domain = c(-.06,0)
  )
  f_pos <- scales::col_numeric(
    palette = c('#ffffff','#69cfd5'),domain = c(0,0.16)
  )
  ifelse(x < 0,f_neg(x),f_pos(x))
}

gt(df) %>%
  data_color(columns = 2:6,colors = pal)

image