Huxtable:用另一个矩阵对一个矩阵进行颜色编码

时间:2019-11-25 14:28:03

标签: r

是否可以通过不同表中给出的颜色对表(使用huxtable生成)进行颜色编码?

head_mtcars <- head(mtcars)
tbl_A <- as_hux(head_mtcars[1:2])
tbl_B <- as_hux(head_mtcars[3:4])

1)首先,我想为tbl_A的第1列和第2列中的元素分别按每列的颜色空间着色

tbl_A %>% 
  huxtable::add_colnames() %>% 
  map_background_color("for each column of tbl_A", by_colorspace("orange", "white", "green"))

2)接下来,我想通过tbl_B每一列的颜色空间为tbl_A的第1列和第2列的元素着色,    即tbl_A的表tbl_B[,1]的col 1中的元素和tbl_A的表tbl_B[,2]的col 2中的元素

tbl_A %>% 
huxtable::add_colnames() %>% 
  map_background_color("for each column of tbl_B", by_colorspace("orange", "white", "green"))

3)最后,不是按列而是按整个表:用ht2的值对ht中的元素进行着色:

ht <- as_hux(matrix(rnorm(25), 5, 5))
ht2 <- as_hux(matrix(rnorm(25), 5, 5))
map_background_color(ht, by_colorspace("orange", "white", "green"))

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

A部分:要按列应用颜色空间,必须分别指定它们:

tbl_A %>% 
  map_background_color(everywhere, 1, by_colorspace("orange", "white", "green")) %>%
  map_background_color(everywhere, 2, by_colorspace("orange", "white", "green")) %>%
  huxtable::add_colnames() 

这可能是一个功能请求,因为我可以想象按列执行是一个常见的用例。

B部分:我认为“手动”进行操作将是最简单的-即构造所需的颜色,然后在set_background_color中使用它们。像这样,我们可以在by_colorspace调用之外使用huxtable的map_。同样,按列分别完成:

# this is hairy. Details in ?"huxtable::mapping-functions"
colors1 <- by_colorspace("orange", "white", "green")(tbl_B, 1:6, 1, 
      matrix(NA, 6, 1))
colors2 <- by_colorspace("orange", "white", "green")(tbl_B, 1:6, 2, 
      matrix(NA, 6, 1))

tbl_A %>% 
  set_background_color(everywhere, 1:2, cbind(colors1, colors2)) %>% 
  huxtable::add_colnames() 

C部分,因此,颜色映射不是在单个列中完成,而是在整个表中完成:

colors_all <- by_colorspace("orange", "white", "green")(tbl_B, 1:6, 1:2, 
  matrix(NA, 6, 2))

tbl_A %>% 
  set_background_color(everywhere, 1:2, colors_all) %>% 
  huxtable::add_colnames() 

更新。在github master(可能会变成huxtable 4.8.0)中,您现在确实可以执行以下操作:

tbl_A %>% 
  map_background_color(everywhere, 1:2, 
    by_colorspace("orange", "white", "green", colwise = TRUE))

而不是分别为每一列调用map_...