R tableGrob热图或列中的条件格式

问题描述 投票:1回答:4

有没有办法为excel的条件格式创建类似的效果 - >色标以便在grid.table / tablegrob对象中显示一个表?颜色指示器对于较低值应为红色,对于列中较高值应为绿色。需要该对象格式,因此表格可以与网格格式一起呈现。

enter image description here

谢谢。

r datagrid heatmap conditional-formatting grob
4个回答
1
投票

你可以在tableGrob内做到这一点。您创建颜色矢量,然后将这些颜色分配给单元格。

所以使用克莱门斯答案中的数据:

library(gridExtra)
library(grid)

# define colour vector
# change `vec` argument of `findInterval` to suit your cut-points
cols <- c("red" ,"orange", "green") [findInterval(my_data$Balance, c(-Inf, 1e4, 2e4, Inf))]
# or 
# https://stackoverflow.com/questions/34517031/red-amber-green-sequential-palette-for-treemap-in-r
cols <- colorRampPalette(c("red", "yellow", "green"))(nrow(my_data))[rank(my_data$Balance)]


# create tales individually for each column
# this make it easy to assign colours to rows
t1 <- tableGrob(my_data["Balance"], 
               theme=ttheme_default(
                      core=list(bg_params = list(fill=cols)),
                      colhead = list(bg_params=list(fill="white", col="grey90"))), 
                      rows = NULL)
t2 <- tableGrob(my_data["ID"], 
               theme=ttheme_default(
                      core=list(bg_params = list(fill="white", col="grey90")),
                      colhead = list(bg_params=list(fill="white", col="grey90"))),
                      rows = NULL)

# join tables
tab <- gtable_combine(t2, t1)
# grid.newpage() ; grid.draw(tab)



# if also want to add black border
# https://stackoverflow.com/questions/31506294/gtable-put-a-black-line-around-all-cells-in-the-table-body
library(gtable)
tab <- gtable::gtable_add_grob(tab, 
                             grobs = rectGrob(gp=gpar(fill=NA, lwd=2)), 
                             t = 1, b = nrow(tab), l = 1, r = ncol(tab))

grid.newpage() ; grid.draw(tab)

1
投票

您可以使用tableHTML

library(tableHTML)

对于数据集:

set.seed(666)
my_data <- data.frame(ID = 101:117,
                      Balance = sample(-1000:60000, 17))

    ID Balance
1  101   46237
2  102   11030
3  103   58657
4  104   11280
5  105   21034
6  106   44296
7  107   58697
8  108   29381
9  109    -188
10 110   14854
11 111   46322
12 112      -2
13 113    4839
14 114    7670
15 115   11875
16 116   48475
17 117    1228

您可以使用tableHTML()函数创建HTML表。然后将主题RAG的颜色等级应用于表格的第2列:

my_data %>% 
  tableHTML(rownames = FALSE,
            widths = c(50, 100)) %>% 
  add_css_conditional_column(columns = 2,
                             colour_rank_theme = 'RAG',
                             decreasing = TRUE)

结果如下:

enter image description here


0
投票

最自然的解决方案是使用heatmap()

heatmap(data.matrix(mtcars))

将产生具有一些默认颜色选项的热图。您可以使用附加参数(例如col = cm.colors(256))或您自己的调色板来更改颜色,以获得所需的输出。

enter image description here


0
投票

我找到的解决方案是执行以下操作..这仅在数据有序并且您列出行数(17基于您的屏幕截图)时才有效:

theme=ttheme_default(
                  core=list(bg_params = list(fill=blues9[1:17]) or
theme=ttheme_default(
                  core=list(bg_params = list(fill=blues9[1:17]) 

希望有所帮助。我也在寻找替代品

© www.soinside.com 2019 - 2024. All rights reserved.