R语言pheatmap修改轴文本样式后原有黑色文字重叠如何解决
问题原因
文本重叠是因为修改grob参数后未清空原有画布缓存,直接输出热图会在已经渲染完成的黑色原始文本上,再叠加绘制一层修改样式后的彩色文本,最终出现叠印效果。
解决方案
方案1:使用grid.edit直接修改渲染对象(推荐)
无需手动定位grob索引,适配不同版本pheatmap,不会出现索引失效问题,也不会触发叠印:
library(pheatmap) ; library(grid) data <- replicate(16, rnorm(16)) rownames(data) <- paste0("OTU", c(1:nrow(data))) colnames(data) <- paste("Sample", c(1:ncol(data))) data = as.data.frame(data) data$regulation = rep(c("up", "down"), each = 8) data$colors = ifelse(data$regulation == "up", "green", "red") # 绘制热图 p = pheatmap(data[, 1:15]) # 匹配排序后的颜色 cols = data[order(match(rownames(data), p$gtable$grobs[[5]]$label)), ]$colors # 直接修改行标签样式 grid.edit("ROW_NAMES", grep = TRUE, global = FALSE, gp = gpar(col = cols, fontsize = 20, fontface = "bold"))
如果需要修改列名颜色,将上述代码中的ROW_NAMES替换为COL_NAMES即可。
方案2:原gtable修改方法补充清屏步骤
如果你习惯直接修改gtable的grobs参数,只需要在修改完成后先清空当前画布再重绘热图,即可避免叠印:
library(pheatmap) ; library(grid) data <- replicate(16, rnorm(16)) rownames(data) <- paste0("OTU", c(1:nrow(data))) colnames(data) <- paste("Sample", c(1:ncol(data))) data = as.data.frame(data) data$regulation = rep(c("up", "down"), each = 8) data$colors = ifelse(data$regulation == "up", "green", "red") # 绘制热图 p = pheatmap(data[, 1:15]) cols = data[order(match(rownames(data), p$gtable$grobs[[5]]$label)), ]$colors p$gtable$grobs[[5]]$gp = gpar(col = cols, fontsize = 20, fontface = "bold") # 清空当前画布后重绘 grid.newpage() grid.draw(p)
内容的提问来源于stack exchange,提问作者Purrsia
相关产品推荐
相关产品推荐

