如何在R的pheatmap函数中调整列间隙的大小?
调整pheatmap中间隙大小的方法
pheatmap包本身没有提供直接调整间隙(gaps_col/gaps_row)大小的参数,但可以通过以下两种方法实现,无需依赖其他包:
方法1:修改热图的gtable对象(推荐)
先生成热图对象,再调整其底层gtable布局中的间隙宽度:
# 创建测试矩阵 set.seed(123) # 固定随机种子保证可复现 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("Test", 1:10, sep = "") rownames(test) = paste("Gene", 1:20, sep = "") # 生成热图对象(不直接绘制) p <- pheatmap(test, cluster_cols = F, gaps_col = 3, silent = TRUE) # 找到间隙对应的宽度索引(默认间隙用pt为单位) gap_idx <- which(sapply(p$gtable$widths, function(x) inherits(x, "unit") && x@unit == "pt")) # 修改间隙大小为20pt(可自行调整数值) p$gtable$widths[gap_idx] <- unit(20, "pt") # 绘制修改后的热图 grid::grid.newpage() grid::grid.draw(p$gtable)
说明:silent = TRUE参数让pheatmap只返回对象不直接绘图,后续通过grid包手动绘制修改后的gtable。这种方法不会影响其他pheatmap的调用,仅对当前热图生效。
方法2:临时修改pheatmap的内部函数
如果需要全局调整所有pheatmap的间隙大小,可以临时修改其内部绘图逻辑:
# 临时编辑pheatmap的内部绘图函数 trace(pheatmap:::draw_heatmap, edit = TRUE)
执行后会弹出代码编辑器,找到以下类似代码行:
pushViewport(viewport(x = current_x, width = unit(5, "pt"), height = 1))
将unit(5, "pt")改为你需要的大小(比如unit(20, "pt")),保存后退出编辑器。此后所有调用pheatmap生成的热图,间隙都会使用新的宽度。
如果要恢复默认设置,执行:
untrace(pheatmap:::draw_heatmap)
内容的提问来源于stack exchange,提问作者Tan
相关产品推荐
相关产品推荐

