跟着Nature Genetics学作图:R语言ggtree画进化树展示不同种番茄的进化关系

简介: 跟着Nature Genetics学作图:R语言ggtree画进化树展示不同种番茄的进化关系

论文

Super-pangenome analyses highlight genomic diversity and structural variation across wild and cultivated tomato species

https://www.nature.com/articles/s41588-023-01340-y

西红柿NG_superPan正文.pdf

数据分析的代码

https://github.com/HongboDoll/TomatoSuperPanGenome

论文中提供了作图用到的原始数据,我们可以试着用论文中的原始数据来复现论文中的图,今天的推文复现论文中的figure1

image.png

首先是右侧的进化树

论文中提供的是nexus格式的书,而且是放在了excel里,这里我们复制到文本文件中,修改成newick格式

读取树文件

library(ggtree)
library(treeio)
library(ggh4x)
tree<-read.tree("data/20230408/figure1b.txt")
tree

添加根部的小短线

tree$root.edge<-0.1

最基本的进化树

ggtree(tree)+
  geom_tiplab(fontface="italic")+
  theme_tree2()+
  geom_rootedge() -> p 
p

image.png

这里右侧显示不全,可以通过设置x轴的范围来解决

论文中的树是从左上角开始,ggtree默认是从左下角开始,想实现论文中的效果可以通过旋转指定节点来实现

先给每个节点添加上数字

p+
  geom_nodelab(aes(label=node))

image.png

直接旋转15节点

ggtree::rotate(p,node = 15) -> p1
p1

image.png

添加右侧的分组标签和下方的标尺

p1+
  scale_x_continuous(breaks = c(seq(0,3.2,by=0.45),3.5),
                     limits = c(-0.3,5.5),
                     labels = c(8:0))+
  guides(x=guide_axis_truncated(trunc_lower = 0,
                                trunc_upper = 3.5))+
  labs(x="Age (million years)")+
  theme(axis.title.x = element_text(hjust=0.3))+
  #geom_nodelab(aes(label=node))+
  geom_cladelab(node=18,label="I",textcolor="red",
                offset=1)+
  geom_cladelab(node=20,label="II",textcolor="red",
                offset=1)+
  geom_cladelab(node=23,label="III",textcolor="red",
                offset=1)+
  geom_cladelab(node=24,label="IV",textcolor="red",
                offset=1.7) -> pp
pp

image.png

然后是添加文本注释

ggplot_build(pp)$data[[5]]
pp+
  annotate(geom = "segment",x=1.8,y=1.5,xend = 2.6,yend=3,
           arrow=arrow(angle = 20,type="closed",length = unit(3,'mm')))+
  annotate(geom="label",x=1.8,y=1.5,label="Mean wild-cultivated\ntomato divergence\n0.71 Ma",hjust=0.5)+
  annotate(geom = "segment",x=1,y=4,xend = 1.7,yend=5.2,
           arrow=arrow(angle = 20,type="closed",length = unit(3,'mm')))+
  annotate(geom="label",x=1,y=4,label="Mean divergence\n1.73 Ma",hjust=0.5)+
  annotate(geom = "segment",x=-0.2,y=10,xend = -0.05,yend=12.2,
           arrow=arrow(angle = 20,type="closed",length = unit(3,'mm')))+
  annotate(geom="label",x=-0.2,y=10,label="Fix at\n7.5 Ma",hjust=0.5)

image.png

论文中还把有的地方的枝长截断了,这个暂时不知道怎么实现了

左侧的堆积柱形图

library(readxl)
library(tidyverse)
fig1a.df<-read_excel("data/20230408/41588_2023_1340_MOESM5_ESM.xlsx",
                     sheet = "Fig. 1a",
                     skip = 1)
fig1a.df %>% colnames()
fig1a.df %>% 
  mutate(Species=factor(Species,levels = rev(Species))) %>% 
  pivot_longer(!Species) %>% 
  mutate(name=factor(name,levels = c("Non repetitive","Unknown repeats","Other repeats",
                                     "DNA transpons","Other retranspons","ClassI/LTR",
                                     "ClassI/LTR/Gypsy","ClassI/LTR/Copia"))) %>% 
  ggplot(aes(x=value,y=Species))+
  geom_bar(stat = "identity",aes(fill=name))+
  theme_bw()+
  theme(legend.position = c(0.8,0.2),
        panel.border = element_blank(),
        axis.text.x = element_text(),
        axis.line.x = element_line(),
        #axis.ticks.x = element_line(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        panel.grid = element_blank(),
        legend.title = element_blank())+
  scale_x_continuous(limits = c(0,2000000000),
                     labels = function(x){x/1000000},
                     breaks = seq(0,1500000000,by=300000000))+
  guides(x=guide_axis_truncated(trunc_lower = 0,
                                trunc_upper = 1500000000))+
  labs(x=NULL,y=NULL)+
  scale_fill_manual(values = c("#34a56c","#26c2e2","#37519e","#3fbc9c",
                               "#eedf42","#907135","#f05435","#67696b"),
                    limits=rev(c("Non repetitive","Unknown repeats","Other repeats",
                                 "DNA transpons","Other retranspons","ClassI/LTR",
                                 "ClassI/LTR/Gypsy","ClassI/LTR/Copia")),
                    labels=rev(c("Non repetitive","Unknown repeats","Other repeats",
                                 "DNA transpons","Other retranspons","LTR/Others",
                                 "LTR/Gypsy","LTR/Copia")))

image.png

最后是拼图

library(patchwork)
p.stacked+p.tree  

image.png

ggtree这个R包的作者Y叔将ggtree的帮助文档写成了一本书,中文版现在已经出版了,彩版,现在购买是半价才54块5,非常划算,赶紧入手吧!ggtree不仅能做进化树的可视化展示,还可以做聚类分析的树图,所以只要自己的数据分析中涉及到聚类分析,买这本都会有用的!

134b6146e3dbe8cc5e90b86fe6e59c7.jpg

716daed5370930734efe0415977993c.jpg

示例数据和代码可以给推文点赞,然后点击在看,最后留言获取

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!
相关文章
|
6月前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
6月前
|
机器学习/深度学习 算法 数据库
数据分享|R语言用核Fisher判别方法、支持向量机、决策树与随机森林研究客户流失情况
数据分享|R语言用核Fisher判别方法、支持向量机、决策树与随机森林研究客户流失情况
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
R语言SVM、决策树与因子分析对城市空气质量分类与影响因素可视化研究
R语言SVM、决策树与因子分析对城市空气质量分类与影响因素可视化研究
|
6月前
|
机器学习/深度学习 数据采集 算法
R语言、WEKA关联规则、决策树、聚类、回归分析工业企业创新情况影响因素数据
R语言、WEKA关联规则、决策树、聚类、回归分析工业企业创新情况影响因素数据
|
6月前
|
机器学习/深度学习 算法 搜索推荐
【视频】决策树模型原理和R语言预测心脏病实例|数据分享(上)
【视频】决策树模型原理和R语言预测心脏病实例|数据分享
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
R语言航班延误影响预测分析:lasso、决策树、朴素贝叶斯、QDA、LDA、缺失值处理、k折交叉验证(上)
R语言航班延误影响预测分析:lasso、决策树、朴素贝叶斯、QDA、LDA、缺失值处理、k折交叉验证
|
6月前
|
机器学习/深度学习 数据可视化 算法
R语言CART决策树、随机森林、chaid树预测母婴电商平台用户寿命、流失可视化
R语言CART决策树、随机森林、chaid树预测母婴电商平台用户寿命、流失可视化
|
6月前
|
算法 数据挖掘 数据库
R语言主成分PCA、决策树、boost预警模型在跨区域犯罪研究数据挖掘分析|数据分享
R语言主成分PCA、决策树、boost预警模型在跨区域犯罪研究数据挖掘分析|数据分享
|
6月前
|
数据可视化 数据挖掘 数据处理
R语言用决策树的酒店收入和产量预测可视化研究
R语言用决策树的酒店收入和产量预测可视化研究
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化|数据分享
R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化|数据分享

热门文章

最新文章