ComplexHeatmap使用anno_mark时行标注溢出热图的问题咨询
ComplexHeatmap anno_mark标注溢出热图范围的解决办法
我用ComplexHeatmap绘制聚类标记基因热图,因为基因数量太多,只想展示特定基因,所以用rowAnnotation里的anno_mark()来实现。但要展示的基因还是不少,导致行标注直接溢出热图范围了。
我已经试了下面这些操作,但都没解决问题:
- 调小行标注的字体大小,只是文本变小了,标注还是溢出
- 添加
extend = unit(0, "mm")参数,没效果 - 给
anno_mark加link_height = unit(0, "mm"),输出完全没变化
我的代码如下:
nlmegadegmat <- nlmeganoNA.small@assays$RNA@scale.data[nlmega.markers_res0.8$gene, ] nlmeglevel <- unique(nlmeganoNA$RNA_snn_res.0.8) %>% sort() cluster_anno <- factor(nlmeganoNA.small$RNA_snn_res.0.8, levels = nlmeglevel) myCol <- colorRampPalette(c('dodgerblue', 'black', 'yellow'))(50) myBreaks <- seq(-2, 2, length.out = 50) nlmegShowGenes <- nlmega.markers_res0.8$gene[c(1,2,3,11,12,14,16,22,25,28,32,36,37,40, 41,44,47,51,52,53,61,63,65,69,71,72,74,81,82,86,90,91,95,96,99,101,102,104,111,113,114, 118,121,124,131,132,134,137,141,143,144,150,151,156,158,161,163,166,167,168,171,173,181, 183,186,191,192,195,202,203,209,211,213,218,219,225,227,240,241,244,248,251,254,259,265, 267,271,273,275)] nlmegHAright = rowAnnotation(foo = anno_mark(at = which(rownames(nlmegadegmat) %in% nlmegShowGenes), labels = rownames(nlmegadegmat[rownames(nlmegadegmat)%in%nlmegShowGenes], labels_gp = gpar(fontsize=2), extend = unit(0, "mm"), link_height = link_width)) Heatmap(nlmegadegmat, name = "Expression", column_split = cluster_anno, cluster_columns = FALSE, show_column_dend = FALSE, cluster_column_slices = TRUE, column_title_gp = gpar(fontsize = 8), column_gap = unit(0.5, "mm"), cluster_rows = FALSE, show_row_dend = FALSE, col = colorRamp2(myBreaks, myCol), row_names_gp = gpar(fontsize = 6), column_title_rot = 90, top_annotation = HeatmapAnnotation(foo = anno_block(gp = gpar(fill = scales::hue_pal()(28)))), right_annotation = nlmegHAright, show_column_names = FALSE, use_raster = TRUE)
当前输出效果:

解决方法
1. 先修正代码里的语法错误
你代码里anno_mark的labels参数有括号不闭合的问题,而且link_height用了未定义的link_width,先把这个改了:
nlmegHAright = rowAnnotation(foo = anno_mark( at = which(rownames(nlmegadegmat) %in% nlmegShowGenes), # 修正索引方式,闭合括号 labels = rownames(nlmegadegmat)[rownames(nlmegadegmat) %in% nlmegShowGenes], labels_gp = gpar(fontsize=2), extend = unit(0, "mm"), # 替换成具体的单位值 link_height = unit(0.5, "mm"), # 手动指定标注区域的宽度,给基因名留出空间 width = unit(8, "cm") ))
2. 调整标注布局与空间
- 增加标注区域宽度:用上面的
width参数,根据你要展示的基因数量调整,比如基因多就设成unit(10, "cm") - 换标注位置:如果右侧空间不够,把标注移到左侧,用
side = "left"参数:anno_mark(at = ..., labels = ..., side = "left", width = unit(8, "cm")) - 垂直排列标注:把基因名竖起来,节省水平空间,加
labels_rot = 90:anno_mark(at = ..., labels = ..., labels_rot = 90, labels_gp = gpar(fontsize=3))
3. 调整整体热图尺寸
绘制热图时,手动指定热图的宽高,确保整体布局有足够空间容纳标注:
Heatmap(nlmegadegmat, name = "Expression", # 其他参数不变... heatmap_width = unit(15, "cm"), heatmap_height = unit(20, "cm"), right_annotation = nlmegHAright)
内容的提问来源于stack exchange,提问作者basedan
相关产品推荐
相关产品推荐

