如果生物信息只学习一个R包,那一定是ggplot2。
如果ggplot2里只能选择一种,那一定是ggtree。
在生物信息学领域,进化树是研究物种之间关系的重要工具,是我们分析工作中一定不能缺少的一环,而ggtree就是一款绘制tree的大大大神器。
这款由可视化大神余光创老师研发的R神器,可谓是生物信息研发人员人手一份。
然而可惜的是,ggtree目前是全代码操作,对于命令行操作不熟悉的老师使用起来较为困难。为了方便大家的使用,特将笔者自己梳理的ggtree的使用记录分享下~
一、ggtree的安装(仅需一次)
安装 ggtree前先确保您已经安装了 R 语言和 RStudio。接下来在 R 控制台中输入以下代码以安装 `ggtree` 及其相关依赖包:
install.packages("BiocManager")BiocManager::install("ggtree")# install.packages("treeio")
二、读入文件
library("ggtree") library("treeio") library("dplyr")# 读入tree文件 tree<-read.newick(nwkfile,node.label="label") # 读入列表文件(可用于后续分组、标记颜色等) meta<-read.delim(info,header=TRUE)
这里再啰嗦两句,说明一下这里读入的nwk文件是啥?nwk也就是Newick格式,是一种最常用于表示进化树(系统发育树)的文件格式。同时也是mega、fasttree等多种构树软件的输出文件格式。
nwk文件示例:
((A:0.1, B:0.2):0.3, C:0.4);
这就是一个简单的Newick格式的树,表示有一个四个节点的树,其中A和B是子节点,C是另一个子节点,且各个分支具有特定的长度。
三、绘制tree(最关键的来了)
最简单,最直接,但是不好看的tree
ggtree(tree)
图片
为了美化,我们可以根据需要将其他相关数据(如物种分组信息)合并到树数据框中。
# 读入列表文件(可用于后续分组、标记颜色等)meta<-read.delim(info,header=TRUE)tree_df <- fortify(tree) # 合并tree和分组信息 tree_df <- tree_df %>% left_join(meta, by = c("label" = "ID")) # 绘制tree,并添加分组颜色p1 <- ggtree(tree_df,layout="roundrect",branch.length="none") + geom_tippoint(aes(label = label, color = Group), size = 3) + theme(legend.position = "right") p1
图片
这样看,是不是顺眼了很多?分组更为清晰明了一些啦。
具体解释下ggtree示例中几个小参数的具体含义:
geom_tippoint:用于在叶子节点(tip)上添加点,通常用于标示具体的样本或物种。可以通过size,color的具体设置来做节点的调整。
scale_color_manual: 用于自定义颜色的映射。当你想要为不同的组或分类指定特定的颜色时很有用。
theme:用于自定义图形的整体主题和样式,比如字体、背景、网格线等。可以调整图形的美观性和可读性。
annotate:用于在图形上添加注释,如文本、箭头或标记。这可以帮助解释图上的某些特征或数据。
layout 指定树形状的布局策略,比如树的分支方向、叶节点的位置等。
除示例中的roundrect外,常用的另外两种布局类型:
"rectangular": 直角布局,默认的基本布局,树呈现为上下或左右结构。
"circular": 圆形布局,与径向布局类似,但叶节点沿圆的周围均匀分布。
四、结果保存
这里同ggplot的其他包,都是用ggsave命令完成结果的保存。一般建议保存为pdf格式,方便后续修改。
ggsave("tree_plot.pdf", plot = p1, width = 10, height = 6)
五、批量运行
说实话如果是单个tree的绘制和美化,我并不建议用ggtree,网页版的iTol是更好的选择(步步图解iTol-给进化树做个美颜)
ggtree的优点是更适于批量化本地运行。比如我们有一百个文件都需要做tree,我们可以如下操作
for (file in file_list) { # 循环读取树文件 tree <- read.tree(file) # 从文件名提取物种名 # 创建树数据框 tree_df <- fortify(tree) # 合并分组信息 tree_df <- tree_df %>% left_join(meta, by = c("label" = "ID"))# 绘制树 p1 <- ggtree(tree_df, layout = "roundrect") + geom_tree() + geom_tippoint(aes(label = label, color = Group), size = 1) + theme(legend.position = "none") + annotate("text", x = max(tree$edge.length) * 0.5, y = -3, label = file, size = 2, vjust = -1) # 保存每个图 ggsave(paste0(species_name, ".pdf"), plot = p1, width =11, height = 5) # 将图添加到列表中 plots[[length(plots) + 1]] <- p1 } # 使用cowplot将图合并,每行显示5个图 combined_plot <- plot_grid(plotlist = plots, ncol = 5) # 保存合并后的图形 ggsave("combined_tree_plot.pdf", plot = combined_plot)
此时,我们不仅得到了100个pdf格式的tree图,还得到了一张整图(涵盖了所有结果)。这是iTol完全做不了的事情。
当然,ggtree还有更多其他的优点,比如,有更大的变化,支持各种变形。就像乐高一样,ggtree其实没有固定的套路,支持每个玩家自己的创造。
其官方教程如下:
https://yulab-smu.top/treedata-book/
最后再次感慨一下,学习真不是一件容易的事情。
长按关注
风作伴,梦做马,追啊迎啊最热烈的年华
-年少的你啊
公众号名称:微微悦明
科学的乐趣是获得新知识的喜悦~
高通量测序、大数据病原微生物检测和监测健康大数据行业资讯记录与分享
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。