R tableGrob тепловая карта или условное форматирование в столбце

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

R tableGrob тепловая карта или условное форматирование в столбце

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 326
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Наиболее естественным решением для этого является использование 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)

Результат выглядит так:

Спасибо за ваш вклад. Знаете ли вы, можно ли использовать html в сеточной графике вместе с ggplots для отчетности в формате pdf (все на одной странице)?

KRStam 27.04.2018 11:17

это зависит от движка конвертации. Самым простым решением было бы использовать пакет webshot для создания снимка экрана HTML. вы можете сохранить его с помощью write_tableHTML()

clemens 27.04.2018 11:24
Ответ принят как подходящий

Вы можете сделать это в 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]) 

Надеюсь, это поможет. Я сам тоже ищу альтернативы

Другие вопросы по теме