Удалите NA и заполните только ячейки, содержащие числа в tableGrob - PullRequest
0 голосов
/ 09 июля 2020

У меня есть таблица (top.table), которую я хотел бы отобразить в ggplot, но у меня проблемы с переформатированием таблицы. Мне нужно отформатировать его так, чтобы все элементы NA были пустыми и заполнялись указанными цветами только в том случае, если в элементе содержится число. В основном, заполняйте цвета, как в приведенном ниже коде, за исключением того, что элементы NA должны быть заполнены по умолчанию (белые), а текст NA должен быть удален. Если удаление NA невозможно описанным мной способом, изменение цвета / заливки текста также будет работать для меня (т.е. изменить цвет текста / заливку чисел, но не NA).

top.table <- structure(c(7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 57.5, 45.5, 
NA, NA, NA, 128.5, 78.5, 71.5, 49, NA, NA, NA, 1043, NA, NA, 
710, 838, 1481, 737, NA, NA, 1096, 5923, 3697, NA, 1726, NA, 
NA, 3545, NA, NA, 1733, 2333, NA, 3807, 1795, NA, 2761, NA, 2887, 
NA, NA, 2211, 2544), .Dim = c(11L, 5L), .Dimnames = list(NULL, 
    c("Sample Number", "Static", "D10 FB", "D12 FB", "D14 FB"
    )))

colors <- structure(list(newcolor = c("dodgerblue2", "#E31A1C", "#FDBF6F", 
"palegreen2", "skyblue2", "green4", "#6A3D9A", "#FF7F00", "gold1", 
"#CAB2D6", "#FB9A99")), row.names = c(NA, -11L), class = c("tbl_df", 
"tbl", "data.frame"))

tt1 <- ttheme_minimal(
  core = list(bg_params = list(fill = colors, col = NA))
)

g <- tableGrob(top.table, theme = tt1)
grid.draw(g)    

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

С помощью @AllanCameron решение, которое я придумал, состояло в том, чтобы использовать повторение цветов для количества столбцов в top.table и использовать replace () для преобразования всех элементов NA в "белые" перед вызовом tableGrob ()

#make repeated columns of colors
table.colors <- matrix(rep(colors, each = ncol(top.table)), 
                       ncol = ncol(top.table), byrow = TRUE)

#index matrix to fine NAs
table.ind <- is.na(top.table)

#make replacements
table.colors <- replace(table.colors, table.ind, "white")

tt1 <- ttheme_minimal(
  core = list(bg_params = list(fill = table.colors))
)

g <- tableGrob(replace(top.table, is.na(top.table), ""), theme = tt1)

grid.draw(g)
0 голосов
/ 09 июля 2020

Это может показаться очень очевидным решением, но почему бы просто не заменить NA пустыми строками при построении таблицы?

g <- tableGrob(replace(top.table, is.na(top.table), ""), theme = tt1)

grid.newpage()
grid.draw(g) 

введите описание изображения здесь

...