输入文件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)