有没有办法为excel的条件格式化创建类似的效果 - >颜色比例,以便在grid.table / tablegrob对象中呈现一个表?颜色指示器对于较低值应为红色,对于列中较高值应为绿色。 需要该对象格式,因此表格可以与网格格式一起呈现。
谢谢。
答案 0 :(得分: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
的颜色等级应用于表格的第二列:
my_data %>%
tableHTML(rownames = FALSE,
widths = c(50, 100)) %>%
add_css_conditional_column(columns = 2,
colour_rank_theme = 'RAG',
decreasing = TRUE)
结果如下:
答案 1 :(得分:1)
您可以在tableGrob
内执行此操作。您创建颜色矢量,然后将这些颜色分配给单元格。
所以使用clemens的回答数据:
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)
答案 2 :(得分:0)
最自然的解决方案是使用heatmap()
?
heatmap(data.matrix(mtcars))
会产生一个带有一些默认颜色选项的热图。您可以使用其他参数(例如col = cm.colors(256)
)或您自己的调色板来更改颜色,以获得所需的输出。
答案 3 :(得分: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])
希望有帮助。我也在寻找替代品