Есть ли способ создать аналогичный эффект для условного форматирования Excel -> цветовые шкалы, чтобы представить таблицу в объекте grid.table / tablegrob? Цветовой индикатор должен быть красным для более низких значений и зеленым для более высоких значений в столбце. Этот формат объекта необходим, чтобы таблица могла быть представлена в формате сетки вместе с графиками.
Спасибо.





Наиболее естественным решением для этого является использование heatmap()?
heatmap(data.matrix(mtcars))
Будет создана тепловая карта с некоторыми параметрами цвета по умолчанию. Вы можете изменить цвет, используя дополнительный параметр (например, col = cm.colors(256)) или свою собственную цветовую палитру для достижения желаемого результата.
Для этого можно использовать 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
Затем вы можете создать таблицу HTML с помощью функции tableHTML(). Затем примените ранг цвета с темой RAG ко 2-му столбцу таблицы:
my_data %>%
tableHTML(rownames = FALSE,
widths = c(50, 100)) %>%
add_css_conditional_column(columns = 2,
colour_rank_theme = 'RAG',
decreasing = TRUE)
Результат выглядит так:
это зависит от движка конвертации. Самым простым решением было бы использовать пакет webshot для создания снимка экрана HTML. вы можете сохранить его с помощью write_tableHTML()
Вы можете сделать это в 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)
Решение, которое я нашел, заключалось в следующем ... это работает, только если данные в порядке и вы указываете количество строк (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])
Надеюсь, это поможет. Я сам тоже ищу альтернативы
Спасибо за ваш вклад. Знаете ли вы, можно ли использовать html в сеточной графике вместе с ggplots для отчетности в формате pdf (все на одной странице)?