Вы можете редактировать цвета границ индивидуально для каждой ячейки, что может быть использовано для решения этой проблемы. Точное решение будет зависеть от точного состава вашего объекта pheatmap
.
Во-первых, получите имена гробов (графических объектов), хранящихся в вашей тепловой карте. Вам нужно будет взять тот, который соответствует отдельным прямоугольникам (ячейкам) тепловой карты. Для меня это первый гроб класса gTree
, но попробуйте и посмотрите, какой из них подойдет вам. Вот как я извлекаю имя гроба:
grob_classes <- purrr::map(pheatmapM$gtable$grobs, class)
idx_grob <- which(purrr::map_lgl(grob_classes, function(cl) 'gTree' %in% cl))[1]
Затем нам нужно найти прямоугольный гроб, который является дочерним элементом gTree
гроба, который мы только что нашли, например:
grob_names <- names(pheatmapM$gtable$grobs[[idx_grob]]$children)
idx_rect <- grob_names[grep('rect', grob_names)][1]
Теперь из этого вложенного гроба можно извлечь графические параметры: fill
(определяет фактический цвет заливки каждой ячейки) и col
(определяет цвет границы). По умолчанию col
— это одно значение, тогда как fill
— это матрица шестнадцатеричных кодов. Когда я заменяю col
тем, что хранится в fill
, вот так...
pheatmapM$gtable$grobs[[idx_grob]]$children[[idx_rect]]$gp$col <- pheatmapM$gtable$grobs[[idx_grob]]$children[[idx_rect]]$gp$fill
... это равносильно устранению границы, поскольку теперь она того же цвета, что и заливка. Чтобы убедиться, что между ячейками не осталось промежутков, также увеличьте толщину границы.
pheatmapM$gtable$grobs[[idx_grob]]$children[[idx_rect]]$gp$lwd <- 3
По моему мнению, потенциальные проблемы могут возникнуть с определением правильного idx_grob
или idx_rect
в вашем конкретном pheatmap
. По этой причине я включил воспроизводимый пример (с R 4.0.3
и pheatmap 1.0.12
, работающими в macOS), который достигает желаемого результата (без границ и пробелов между ячейками), который вы можете использовать для начала:
set.seed(1)
## Generate sample data
x <- table(round(rnorm(500, 100, 2)), round(rnorm(500, 100, 2)))
ph <- pheatmap::pheatmap(x, cluster_cols = FALSE, cluster_rows = FALSE)
## Extract the right grob
grob_classes <- purrr::map(ph$gtable$grobs, class)
idx_grob <- which(purrr::map_lgl(grob_classes, function(cl) 'gTree' %in% cl))[1]
grob_names <- names(ph$gtable$grobs[[idx_grob]]$children)
idx_rect <- grob_names[grep('rect', grob_names)][1]
## Remove borders around cells
ph$gtable$grobs[[idx_grob]]$children[[idx_rect]]$gp$col <- ph$gtable$grobs[[idx_grob]]$children[[idx_rect]]$gp$fill
ph$gtable$grobs[[idx_grob]]$children[[idx_rect]]$gp$lwd <- 3
## Plot result
graphics::plot.new()
print(ph)
Результат должен выглядеть так:
person
davnovak
schedule
26.01.2021
border_color = NA
без кавычек вокруг NA ? - person neilfws   schedule 02.06.2017border_color = NA
, иborder_color = "NA"
у меня отлично работают - person Al14   schedule 14.06.2017