Complexheatmap::pheatmap图cell尺寸设置

首先放出参考链接:

  • https://jokergoo.github.io/2020/05/11/set-cell-width/height-in-the-heatmap/

我们在画热图的时候,有时候会遇到想调整热图中单元格子的尺寸的情况。并且希望可以动态的设置,也就是不管是多少数据,格子都可以随着图片大小缩放。
Complexheatmap中的Heatmap()函数,有一个width和height参数可以设置

Heatmap(mat, name = "mat", 
    width = ncol(mat)*unit(5, "mm"), 
    height = nrow(mat)*unit(5, "mm"))

而对应到pheatmap中就是cellwidth和cellheight,设置的就是cell的长和宽。

https://jokergoo.github.io/2020/05/06/translate-from-pheatmap-to-complexheatmap/

所以只需要在pheatmap中设置这两个参数

library("ComplexHeatmap")
test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)] + 4
colnames(test) = paste("Testlong", 1:10, sep = "")
rownames(test) = paste("1230_", 1:20, sep = "")
ht <- pheatmap(test,
        annotation_col = NA, # 列分组
        cellwidth =20, cellheight=20,
        annotation_row =NA,  # 行分组
        annotation_colors = ann_colors,  # 指定样本分组颜色, list格式
        color = colorRampPalette(c("#0000FF", "#FFFCC8", "#FF0000"))(100), # 热图色卡颜色
        border_color = NA,  # cell有无边框,或指定颜色
        cluster_rows = TRUE,  # 显示行聚类
        cluster_cols = TRUE,  # 显示列聚类
        legend = TRUE, #是否显示色标图例
        main = "jsd diversity distance", # 图标题
        display_numbers = FALSE, number_format = "%.1f", number_color="Black", fontsize_number=4,  # cell中是否显示数值;格式设置
        angle_col = "45",  # options (0, 45, 90, 270 and 315)  # 调整列文字角度
        annotation_legend = TRUE,
        show_rownames = F
)

然后使用draw()得到绘制好的图,根据ComplexHeatmap:::width(ht)ComplexHeatmap:::height(ht)可以获取此时图的长和宽,注意这里包括所有的元素,包括图例,树状图等所以如果需要调整参数一定要在计算图尺寸之前全部设置好!可以直接使用如下函数来获取尺寸。

calc_ht_size = function(ht, unit = "inch") {
    pdf(NULL)
    ht = draw(ht)
    w = ComplexHeatmap:::width(ht)
    w = convertX(w, unit, valueOnly = TRUE)
    h = ComplexHeatmap:::height(ht)
    h = convertY(h, unit, valueOnly = TRUE)
    dev.off()
    c(w, h)
}

不过要注意的一点是,这里是pdf/svg输出,所以设置的单位是inch,如果是png,需要设置为pt
使用方式如下:

size = calc_ht_size(ht)
width = size[1]
height = size[2]
pdf("heatmap.pdf", height = height , width =width)
print(ht)
dev.off()

可以画出来很正方形的热图。


你可能感兴趣的:(Complexheatmap::pheatmap图cell尺寸设置)