如何在R中增大导出图像里与HeatMap匹配的Dendrogram宽度?
问题:增大ggplot2+ggh4x热图中树状图的宽度
使用ggplot2结合ggh4x包绘制了热图及对应树状图,但导出的高分辨率图像中树状图宽度不足,无法清晰观察聚类关系,需要增大x轴(顶部)和y轴的树状图宽度。
数据
> SampleDat CCC CS G1 G2 G3 LMS USC ASCL2 0 0.00000000 0.0000000 0.00000000 0.19791230 0.0000000 -0.2589399 THRB-AS1 0 0.15478030 0.0000000 0.15665590 -0.05063790 0.0000000 -0.1702256 ZFAND2A 0 0.37089000 0.4538498 0.00000000 0.34598680 0.0000000 0.3016402 C10orf82 0 0.13880730 0.0000000 0.15742300 0.18315680 0.0000000 0.1487810 ADAMTS16 0 0.18127015 0.0000000 0.17522080 -0.15981700 0.0000000 0.0000000 LOC107985287 0 -0.04640695 0.1287075 0.12656770 0.21860815 -0.3203314 0.3492471 LOC105375610 0 0.16883540 0.0000000 0.00000000 0.18512860 -0.3199183 0.0000000 LINC00485 0 -0.17285620 0.3035464 -0.10216190 -0.69079680 -0.1887855 0.0000000 PKMYT1 0 0.00000000 0.0000000 0.00000000 0.00000000 -0.3447935 0.0000000 TBX4 0 0.13699000 0.0000000 0.00000000 0.00000000 0.2159004 0.1126036 CNTN4 0 0.11820680 0.0000000 0.11894160 0.00000000 0.0000000 0.2915814 SUMF1 0 0.00000000 0.0000000 0.00000000 0.00000000 -0.6267713 0.0000000 SLC25A13 0 -0.09982340 0.2151051 0.09800212 -0.26193367 0.0000000 -0.3921427 LOC107984568 0 0.00000000 0.0000000 0.24254940 -0.05271005 -0.4876733 0.0000000 HS3ST2 0 0.14462475 0.0000000 0.10068490 0.00000000 0.1197004 0.1814833 C1orf141 0 -0.23244100 0.0000000 0.11186150 -0.07326740 -0.3609651 0.0000000 VGLL2 0 0.00000000 0.0000000 -0.23984550 0.10843580 0.2534536 0.0000000 REXO2 0 0.00000000 0.0000000 0.00000000 -0.53392505 0.0000000 -0.3302150 PAX6 0 0.22198410 0.0000000 0.19559730 0.00000000 0.2500406 0.0000000 H4C13 0 0.00000000 0.0000000 0.00000000 0.00000000 0.4118989 0.0000000
原始绘图脚本
library("readr") library("dplyr") library("ggh4x") library("ggsci") library("ggplot2") # Hierarchically cluster AllGrpDMRgene_mat SampleDat_yclus <- hclust(dist(SampleDat), "ave") SampleDat_xclus <- hclust(dist(t(SampleDat)), "ave") # Melting SampleDat SampleMelt <- data.frame( SYMBOL = rownames(SampleDat)[row(SampleDat)], Group = colnames(SampleDat)[col(SampleDat)], Mdiff = unname(do.call(c, SampleDat)) ) # 新增正负值标记列 Sample_Plotdat<-SampleMelt %>% mutate(status = case_when(Mdiff < 0 ~ "low", Mdiff > 0 ~ "high")) # 将标记列转为因子 Sample_Plotdat$status<-as.factor(Sample_Plotdat$status) # 绘制热图与树状图 HeatDenTest<-ggplot(Sample_Plotdat, aes(Group, SYMBOL, fill = status)) + geom_raster() + xlab("Histological Groups") + ylab("Gene Symbol") + scale_fill_nejm(labels=c('Negative','Positive' ), name="")+ scale_y_dendrogram(hclust = SampleDat_yclus) + scale_x_dendrogram(hclust = SampleDat_xclus, position = "top")+ theme(axis.text.y = element_text(size=rel(.3), vjust = 0.5, hjust=1), axis.title.y = element_text(size=rel(4)), axis.ticks.y = element_blank(), axis.text.x = element_text(size=rel(3), vjust = 0.5, hjust=1), axis.title.x = element_text(size=rel(4)), legend.position = "bottom", legend.text=element_text(size=40), legend.key.size = unit(3, 'cm')) ggsave("HeatDenTest.jpeg", plot = HeatDenTest, width = 18, height =30, units = "in", dpi = 200)
解决方案:调整树状图空间占比
ggh4x包的scale_x_dendrogram()和scale_y_dendrogram()函数提供了space参数,用于控制树状图相对于主热图区域的宽度比例(默认值为0.2),增大该参数即可拓宽树状图。同时可配合调整树状图线条粗细,提升清晰度。
修改后的核心代码
将绘图部分的scale设置修改为:
HeatDenTest<-ggplot(Sample_Plotdat, aes(Group, SYMBOL, fill = status)) + geom_raster() + xlab("Histological Groups") + ylab("Gene Symbol") + scale_fill_nejm(labels=c('Negative','Positive' ), name="")+ # 增大y轴树状图宽度,space值可按需调整 scale_y_dendrogram(hclust = SampleDat_yclus, space = 0.4) + # 增大x轴树状图宽度,space值可按需调整 scale_x_dendrogram(hclust = SampleDat_xclus, position = "top", space = 0.3)+ theme(axis.text.y = element_text(size=rel(.3), vjust = 0.5, hjust=1), axis.title.y = element_text(size=rel(4)), axis.ticks.y = element_blank(), axis.text.x = element_text(size=rel(3), vjust = 0.5, hjust=1), axis.title.x = element_text(size=rel(4)), # 调整树状图线条粗细,提升可读性 axis.dendrogram = element_line(size = 1), legend.position = "bottom", legend.text=element_text(size=40), legend.key.size = unit(3, 'cm'))
参数说明
space:取值范围为0到1之间,数值越大,树状图占据的空间比例越高,宽度越宽。可根据实际可视化效果在0.3-0.5之间尝试调整。axis.dendrogram = element_line(size = 1):增大树状图的线条粗细,避免树状图变宽后线条过细看不清。
额外优化
如果导出图像后仍有空间适配问题,可微调ggsave()的width和height参数,保证热图和树状图的整体比例协调。
内容的提问来源于stack exchange,提问作者Debajyoti Kabiraj
相关产品推荐
相关产品推荐

