首先放出参考链接:
我们在画热图的时候,有时候会遇到想调整热图中单元格子的尺寸的情况。并且希望可以动态的设置,也就是不管是多少数据,格子都可以随着图片大小缩放。
Complexheatmap中的Heatmap()
函数,有一个width和height参数可以设置
Heatmap(mat, name = "mat",
width = ncol(mat)*unit(5, "mm"),
height = nrow(mat)*unit(5, "mm"))
而对应到pheatmap
中就是cellwidth和cellheight,设置的就是cell的长和宽。
所以只需要在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()
可以画出来很正方形的热图。