如何在ggplot中绘制vegan::meandist()生成的树状图?
用ggplot整合Vegan::meandist()的树状图并自定义美学
要把meandist()生成的组间平均相异度树状图整合到ggplot生态中,最方便的方式是结合ggtree包(基于ggplot2开发的系统发育树绘图工具),它能完全控制绘图的颜色、字体、布局等美学元素。以下是针对Dune数据集的完整实现步骤:
步骤1:安装并加载所需包
如果尚未安装依赖包,先执行安装命令:
install.packages(c("vegan", "ggtree", "dplyr"))
加载包并调用内置数据集:
library(vegan) library(ggtree) library(dplyr) # 加载vegan内置的Dune数据集(与用户代码中外部数据结果一致) data(dune) data(dune.env)
步骤2:计算组间平均相异度
先计算样本间的Bray-Curtis相异度,再用meandist()得到按Management分组后的组间平均相异度:
# 样本间相异度计算 dune_dist <- vegdist(dune, method = "bray", na.rm = TRUE) # 按Management分组计算组间平均相异度 dissim <- meandist(dune_dist, grouping = dune.env$Management)
步骤3:构建聚类树并准备着色映射
meandist()返回的是组间相异度矩阵,需要先转换为层次聚类对象;同时提取每个Management组对应的Use因子(去重确保每组对应唯一标签):
# 对组间相异度做层次聚类(采用平均连锁法,匹配meandist默认逻辑) hc <- hclust(dissim, method = "average") # 构建Management与Use的映射关系 use_map <- dune.env %>% distinct(Management, Use) %>% mutate(label = Management)
步骤4:用ggtree绘制自定义美学的树状图
利用ggtree语法结合ggplot2的图层设置,实现按Use因子着色,并自由调整绘图细节:
# 绘制树状图并按Use因子着色 ggtree(hc) + # 添加末端标签(Management组名),绑定Use颜色映射 geom_tiplab(aes(color = Use), size = 4, offset = 0.02) + # 自定义颜色(可按需调整) scale_color_manual(values = c("BF" = "#E69F00", "HF" = "#56B4E9", "NM" = "#009E73", "SF" = "#F0E442")) + # 添加相异度坐标轴 theme_tree2() + # 设置图例与主题样式 labs(color = "土地利用类型") + theme(legend.position = "right", legend.title = element_text(size = 10), legend.text = element_text(size = 8), axis.title.x = element_text(size = 10))
核心优势
ggtree直接兼容hclust对象,无缝对接ggplot2的所有美学修改能力- 通过
aes(color = Use)实现按土地利用类型为组标签着色,精准匹配需求 - 可通过
scale_color_*、theme()等函数自由调整颜色、字体、图例位置、背景等所有细节
内容的提问来源于stack exchange,提问作者Joshua Smith
相关产品推荐
相关产品推荐

