根据分组文件对进化树着色R代码

输入文件1:nwk文件;
输入文件2:两列的分组文件


分组文件示例
library(readxl)
library(ggplot2)
library(ggtree)
library(treeio)
library(ggtreeExtra)
library(ggnewscale)
library(ape)
library(dplyr)
library(scales)

setwd("C:/Users/Desktop/")
tr1 <- read.tree("test.nwk")
tr1 <- unroot(tr1)

df <- read.table("group.xls", header = TRUE, sep = "\t")
# 使用 split 函数按 GroupID 分组
grouped_labels <- split(df$Label, df$GroupID)
# 计算每个分组的标签数量
group_counts <- sapply(grouped_labels, length)
# 按标签数量对分组进行排序
sorted_groups <- names(sort(group_counts, decreasing = TRUE))
# 重新创建分组信息,确保按照排序后的顺序
sorted_grouped_labels <- lapply(sorted_groups, function(g) grouped_labels[[g]])
names(sorted_grouped_labels) <- sorted_groups

# 根据分组信息对树进行分组
grouped_tree <- groupOTU(tr1, sorted_grouped_labels)
# 指定前5个分组的颜色
specified_colors <- c("pink", "blue", "lightgreen", "orange", "purple")
# 使用hue_pal()生成其他颜色
hue_colors <- hue_pal()(length(sorted_groups) - length(specified_colors))

# 创建颜色向量
all_colors <- c(specified_colors, hue_colors)

# 使用ggtree包绘制无根扇形进化树,并按照分组信息自动上色
p <- ggtree(grouped_tree, layout="unrooted", branch.length=‘none’,  aes(color=group)) +  
  geom_tree(size=0.1) +  # 调整线条粗细
  scale_color_manual(name="Groups", values=setNames(all_colors, sorted_groups),breaks=sorted_groups) +  # 指定颜色并按照排序后的分组顺序显示图例
  theme(legend.position="right",  # 控制图例的位置
        legend.title=element_text(size=8),  # 图例标题大小
        legend.text=element_text(size=6),  # 图例文字大小
        legend.key.size=unit(0.2, "cm"),
        legend.position.inside = c(0.8, 0.2),
        plot.margin=unit(c(0.1, 0.1, 0.1, 0.1), "cm"))+
  guides(color = guide_legend(ncol = 3))  # 调整图形的边距)  # 图例键的大小
print(p)
# 保存为PNG文件
ggsave(filename="final_tree_plot.png", plot=p, width=10, height=8, dpi=300)

# 保存为PDF文件
ggsave(filename="final_tree_plot.pdf", plot=p, width=10, height=8)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容