我正在尝试在热图的每个单元格上添加一个数字标签。因为它还需要边际条形图,所以我尝试了两个包。iheatmapr 和 ComplexHeatmap。
(第一次尝试)iheatmapr 可以很容易地添加到下面的添加栏,但我看不到如何在单个单元格的热图中添加标签。
library(tidyverse)
library(iheatmapr)
library(RColorBrewer)
in_out <- data.frame(
'Economic' = c(2,1,1,3,4),
'Education' = c(0,3,0,1,1),
'Health' = c(1,0,1,2,0),
'Social' = c(2,5,0,3,1) )
rownames(in_out) <- c('Habitat', 'Resource', 'Combined', 'Protected', 'Livelihood')
GreenLong <- colorRampPalette(brewer.pal(9, 'Greens'))(12)
lowGreens <- GreenLong[0:5]
in_out_matrix <- as.matrix(in_out)
main_heatmap(in_out_matrix, colors = lowGreens)
in_out_plot <- iheatmap(in_out_matrix,
colors=lowGreens) %>%
add_col_labels() %>%
add_row_labels() %>%
add_col_barplot(y = colSums(bcio)/total) %>%
add_row_barplot(x = rowSums(bcio)/total)
in_out_plot
然后使用: save_iheatmap(in_out_plot, "iheatmapr_test.png") 因为我不能将 ggsave(device = ragg::agg_png etc) 与 iheatmapr 对象一起使用。
此外,iheatmapr 对象与 ggsave() 明显不兼容(也许我错了)对我来说是个问题,因为我通常使用 ragg 包导出图像 AGG 以保留字体大小。我怀疑其他一些热图包制作的自定义对象可能与拼凑和 ggsave 不兼容。
ggsave("png/iheatmapr_test.png", plot = in_out_plot,
device = ragg::agg_png, dpi = 72,
units="in", width=3.453, height=2.5,
scaling = 0.45)
(第二次尝试)ComplexHeatmap 可以很容易地在热图中标记单个数字“单元格”,并且还在其“注释”中提供边缘条,我已经尝试过了,但是它的调色板系统(它使用整数来指代一组颜色)不适合我的 RGB 矢量颜色渐变,总体而言,它是一个复杂的包,显然旨在使图形比我正在做的更高级。
我的目标是如下面的屏幕截图示例所示的样式,它是在 Excel 中制作的。
请任何人都可以为像这样的简单热图建议一个更合适的 R 包,里面有边栏和数字标签?