Условное форматирование таблицы в R ... лучше? - PullRequest
2 голосов
/ 08 марта 2019

Попытка улучшить этот код. То, что я разработал, работает, но выглядит ужасно и ОЧЕНЬ неуклюже.

Ищете метод ggplot или что-то более удобное для пользователя. Буду признателен за советы и рекомендации.

library("dplyr")
thi <- data.frame(RH    = c(1,1,1,2,2,2,3,3,3), T = c(1,2,3,1,2,3,1,2,3), THI = c(8,8,5,7,5,10,5,8,7))
table_thi <- tapply(thi$THI, list(thi$RH, thi$T), mean) %>% as.table()

x = 1:ncol(table_thi)
y = 1:nrow(table_thi)
centers <- expand.grid(y,x)

image(x, y, t(table_thi),
  col = c("lightgoldenrod", "darkgoldenrod", "darkorange"),
  breaks = c(5,7,8,9),
  xaxt = 'n', 
  yaxt = 'n', 
  xlab = '', 
  ylab = '',
  ylim = c(max(y) + 0.5, min(y) - 0.5))

text(round(centers[,2],0), round(centers[,1],0), c(table_thi), col= "black")

mtext(paste(attributes(table_thi)$dimnames[[2]]), at=1:ncol(table_thi), padj = -1)
mtext(attributes(table_thi)$dimnames[[1]], at=1:nrow(table_thi), side = 2, las = 1, adj = 1.2)

abline(h=y + 0.5)
abline(v=x + 0.5)

1 Ответ

4 голосов
/ 08 марта 2019

Как насчет этого:

library(dplyr)
library(ggplot2)
thi <- data.frame(
   RH = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
    T = c(1, 2, 3, 1, 2, 3, 1, 2, 3), 
  THI = c(8, 8, 5, 7, 5, 10, 5, 8, 7)
)

names(thi) = c('col1', 'col2', 'thi')

ggplot(thi, aes(x = col1, y = col2, fill = factor(thi), label = thi)) +
  geom_tile() +
  geom_text()

Option 1

Или в зависимости от того, действительно ли thi factor (дискретная) или непрерывная переменная,вы можете захотеть что-то вроде этого:

ggplot(thi, aes(x = col1, y = col2, fill = thi, label = thi)) +
  geom_tile() +
  geom_text(color = 'white')

Option 2

Примечание: вы, вероятно, хотите избежать использования имен столбцов или переменных, которые являются зарезервированными словамиили сокращения (например, избегайте называть что-то T, потому что это сокращение для ключевого слова TRUE).В приведенном выше коде я переименовал столбцы вашего data.frame.


Поскольку в вопросе указано условное форматирование таблицы, вы можете рассмотреть gt пакет:

library(gt)

thi %>% gt()

GT Table One

Или это:

thi %>% gt() %>% 
  data_color(
    columns = vars(thi), 
    colors = scales::col_factor(
      palette = "Set1",
      domain = NULL
    ))

GT Table 2

Или, может быть, это:

thi %>% gt() %>%
  tab_style(
    style = cells_styles(
      bkgd_color = "#F9E3D6",
      text_style = "italic"),
    locations = cells_data(
      columns = vars(thi),
      rows = thi <= 7
    )
  )

GT Table 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...