前言

撰写这本书是为了给使用tidytree、treeio、ggtree与ggtreeExtra这一套R包进行系统发育树数据整合及可视化等操作的用户提供一个指南。因此,我们假定,阅读本书的读者具有一定的R语言及ggplot2包的使用基础。

ggtree包的开发始于我在香港大学攻读博士期间。在那时,我加入了新发传染性疾病国家重点实验室(State Key Laboratory of Emerging Infectious Diseases,SKLEID),并在管轶教授与林讚育副教授的指导下,参与了修改Newick树字符串的工作,使其能在系统发育树的内部节点标签中包含一些额外的信息,如氨基酸替换,以进行可视化。我编写了一个R脚本来实现这个功能,但很快意识到大多数的系统发育树可视化软件只能通过节点标签展示单一类别的数据。在那时,我们基本不可能同时做到展示两个数据变量来进行比较分析。人们往往需要借助图像后期处理软件才能绘制出能同时展示不同分支或节点相关数据(比如自举值或替换信息)的树图,这使得我萌生了开发ggtree包的念头。首先,我认为一个好的用户界面必须要完全支持ggplot2包通过叠加图层来绘图的语法。这样,简单的图绘制很容易,而复杂的图只不过是简单图的组合。

经过数年的开发,ggtree已经进化为一个软件包套组,其中包括通过整洁接口(tidy interface)来操作树及相关数据的tidytree,用于输入及输出含有丰富注释数据的树文件的treeio,用于可视化及注释树的ggtree,以及用于将数据展示在矩形布局树的右侧或环形布局树的外圈的ggtreeExtra。ggtree是一个通用工具,支持多种不同种类的树与树形结构,同时能被应用于多个不同的学科,帮助科研工作者在进化结构或层次结构的背景下呈现并解读数据。

本书的结构

· 第1篇 树数据的输入/输出及操作。

第1~3章:主要介绍用于树数据输入/输出的treeio包,以及用于树数据操作的tidytree包。

· 第2篇 树数据的可视化及注释。

第4~8章:主要介绍如何使用在ggtree包中实现的图形语法进行树的可视化与注释,以及如何将树的关联数据呈现在树上。

· 第3篇 ggtree拓展包。

第9~11章:主要介绍用于在环形布局的树上呈现数据的ggtreeExtra包,以及其他的一些拓展包,如MicrobiotaProcess和tanggle等。

· 第4篇 杂项。

第12~13章:主要介绍一些由ggtree套组提供的实用工具,以及一系列可复现的示例。

软件的信息及约定

编译本书时的R语言及核心包的信息如下。

其中,treedataverse是一个元包(meta package),能帮助我们轻松地安装并加载本书中所介绍的用于树的处理及可视化的核心包。我们可以在附录A中找到安装treedataverse的指南。

本书的数据集有以下3个来源。

(1)模拟数据。

(2)R包中的数据集。

(3)从互联网上下载的数据。

为了使用户更容易地获取互联网中的数据,我们将这些数据集与能获取到其来源的详细信息存储到TDbook包中,这些信息包括URL、作者信息及引文信息。TDbook包已经被发布在CRAN上,而用户可以使用install.packages("TDbook")命令来安装TDbook包。

在本书中,函数名的后面都添加了一对括号(如treeio::read.beast()),其中双冒号操作符“::”表示访问一个包中的对象。

致谢

在此,非常感谢徐双斌对ggtree系列软件包的长期维护,同时感谢李林与罗晓对本书英文版书稿的审译和校对。

我在开发ggtree软件套组期间获得了许多人的帮助。在此感谢Hadley Wickham,因为他创建了ggtree包所依赖的ggplot2包;感谢管轶教授与林讚育副教授,在我攻读博士期间为ggtree包的开发提供了很多好的建议;感谢Richard Ree邀请我参加系统发育树可视化的催化会议;感谢William Pearson邀请我在Current Protocols in Bioinformatics期刊上发表一篇关于ggtree包的protocol文章;感谢徐双斌、夏永和、黄瑞珠、Justin Silverman、Bradley Jones、Watal M.Iwasaki、Casey Dunn、Tyler Bradley、Konstantinos Geles、Zebulun Arendsee与其他许多对源代码做出过贡献或给予过我反馈意见的人;最后,我还想感谢所有ggtree邮件列表[1]组的成员,由于他们提出了很多具有挑战性的问题,所以才能改进ggtree软件套组的功能。

余光创


[1]ggtree邮件列表详情请参见“外链资源”文档中前言第1条