如何用tanggle包的ggsplitnet同时绘制进化树网络的样本名与分组色点
解决ggsplitnet同时显示样本名和分组着色符号的问题
核心思路是保留进化树网络的原始样本标签,通过外部数据框关联分组信息,再在绘图时分别调用标签和点的图层,无需修改Nnet$translate对象。
完整解决方案代码
# 加载所需包 library(phangorn) library(ggtree) library(tanggle) # 读取进化树网络 fdir <- system.file("extdata/trees", package = "phangorn") Nnet <- phangorn::read.nexus.networx(file.path(fdir, "woodmouse.nxs")) # 定义分组信息,创建包含样本名和分组的数据框 mygroups <- rep(LETTERS[1:3], each = 5) group_df <- data.frame(label = Nnet$translate$label, group = mygroups) # 绘制同时显示样本名和分组着色点的网络 ggsplitnet(Nnet) + geom_tippoint(aes(color = group), size = 5) + # 按分组着色点 geom_tiplab2() + # 显示原始样本名 scale_color_manual(values = c("A" = "red", "B" = "blue", "C" = "green")) + # 自定义颜色 theme(legend.position = "right")
关键说明
- 不要修改
Nnet$translate$label,保留原始样本名才能让geom_tiplab2()正确显示样本名称。 - 通过
group_df将样本名与分组一一对应,ggtree系列函数会自动通过label列匹配树对象和外部数据。 geom_tippoint()的aes(color = group)直接引用外部数据框的分组列,实现按组着色。- 如果需要调整标签和点的位置,可以给
geom_tiplab2()添加offset参数(比如offset = 0.2),避免标签和点重叠。
内容的提问来源于stack exchange,提问作者rdl
相关产品推荐
相关产品推荐

