You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:27:03