R语言pheatmap热图修改列间隙颜色及合并分组列名问题问询
解决方法
你需要的两个效果都可以借助grid包实现,pheatmap基于grid绘图体系,我们可以在热图渲染完成后直接在对应位置添加元素。
完整可运行代码
library(pheatmap) library(grid) set.seed(123) df <- data.frame(matrix(sample(30), ncol = 5)) colnames(df) <- LETTERS[1:5] subj <- c("P1", "P2","Q1", "Q2", "T1","T2") rownames(df) <- subj aka2 = data.frame(ID = factor(rep(c("Pat","Trea"), each=3))) rownames(aka2) <- subj aka3 = list(ID = c(Pat = "white", Trea="blue")) # 绘制热图,先隐藏原有的列名 p <- pheatmap(t(scale(df)), annotation_col = aka2, annotation_colors = aka3[1], annotation_legend = FALSE, gaps_col = c(2,4), show_colnames = F, # 隐藏原有的P1/P2等列名 show_rownames = T, cluster_rows = F, cluster_cols = F, legend = TRUE, clustering_distance_rows = "euclidean", border_color = FALSE) # 定位到热图主体绘图区域 seekViewport("matrix") # 1. 将间隙改为黑色:在间隙位置绘制黑色竖线,调整lwd参数控制黑线宽度覆盖白色间隙 grid.segments(x0 = c(2,4), y0 = 0, x1 = c(2,4), y1 = 1, gp = gpar(col = "black", lwd = 5)) # lwd设为5刚好匹配默认间隙宽度 # 2. 添加分组列名,在两组列的中间位置标注 grid.text(c("P","Q","T"), x = c(1.5, 3.5, 5.5), # 分别对应P组、Q组、T组的中间位置 y = unit(-1, "lines"), # 调整数值控制文字和热图的距离 gp = gpar(fontsize = 12))
参数调整说明
- 如果你不需要间隙完全是黑色,只需要加细边框线,把
lwd参数改为1-2即可 - 可以调整
grid.text里的y参数和fontsize参数,修改列名的位置和大小
内容的提问来源于stack exchange,提问作者Mizzle
相关产品推荐
相关产品推荐

