代码之家  ›  专栏  ›  技术社区  ›  user3022875

将单元格颜色映射到KableXtra中的数据值以创建热图表

  •  2
  • user3022875  · 技术社区  · 6 年前

    我有一个下表,并希望应用行级热图。

    这是rmd文件。

    ---
    title: "Untitled"
    output: pdf_document
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = TRUE)
    
    
    library(dplyr)
    library(kableExtra)
    #d = data.frame(group= c("A","b"),cat1=c(2,50),cat2=c(100,2))
    d = data.frame(group= c("A"),cat1=c(2),cat2=c(NA))
    
    d = d %>%
        mutate_if(is.numeric, function(x) {
      cell_spec(x, "latex", bold = F, background = spec_color(x,option="C", begin=.5, end = 0.99))
    }) 
    
    ```
    
    
    
    ```{r table , echo= FALSE, comment = FALSE, message= FALSE, warning = FALSE, fig.height=3, fig.width = 8} 
    
    kable(
          d, format ="latex",
          caption = "",
          booktabs = T, 
          longtable = T,
          escape = F ,
          align = "c"
          ) %>% kable_styling(latex_options = c(
            "striped", 
            "repeat_header"
            )
           )%>% row_spec( 0,angle = 90)
    
    
    ```
    

    注意:理想情况下,最好使用kablextra功能来实现这一点,这样它们的配色方案就可以将exactley与其他kablextra表相匹配。

    1 回复  |  直到 6 年前
        1
  •  2
  •   eipi10    6 年前

    实际上,我不知道如何从中获得所需的颜色映射 spec_color colorRamp 函数和调色板生成函数,可以根据需要进行调整。代码还通过将缺少的值着色为浅灰色来处理它们。

    ---
    output: pdf_document
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = TRUE)
    library(viridis)
    library(dplyr)
    library(kableExtra)
    
    set.seed(2)
    d = data_frame(group = sample(LETTERS[1:5], 10, replace=TRUE), cat1=runif(10, 0, 100), cat2=runif(10, 0, 100))
    d[5,2] = NA
    
    max.val = max(d[ , sapply(d, is.numeric)], na.rm=TRUE)
    
    #pal.fnc = colorRamp(viridis_pal(option="C")(2))
    pal.fnc = colorRamp(c("red", "yellow", "green"))
    
    d = d %>%
        mutate_if(is.numeric, function(x) {
      cell_spec(round(x,1), "latex", bold = F, color=grey(.3),
                background = rgb(pal.fnc(x/max.val) %>% replace(., is.na(.), 200), maxColorValue=255))
    }) 
    
    ```
    
    ```{r table , echo= FALSE, comment = FALSE, message= FALSE, warning = FALSE, fig.height=3, fig.width = 8} 
    kable(
          d, format ="latex",
          linesep="",
          caption = "",
          booktabs = T, 
          longtable = T,
          escape = F ,
          align = "c"
          ) %>% kable_styling(latex_options = c(
            "striped", 
            "repeat_header"
            )
           )
    ```
    

    enter image description here