提供一站式科研服务解决方案

技术服务电话
027-65528997

R语言|ggtreeExtra包绘制进化树

发表时间:2022-05-10 17:42

点击上方“蓝字”,关注更多精彩



R-ggtreeExtra绘制进化树


ggplot2提供的geom_tile图层可以画热图了,ggplot2geom_point或者ggstargeom_star可以绘制点图层。为了扩展ggtree在点和布局中的系统发育树的外环上呈现相关数据,开发ggtreeExtra包提供了一个函数geom_fruit用于将图形与树对齐相关图表将在树的外部面板的不同位置对齐。还开发geom_fruit_list在树的同一个外部面板上添加多个层。一些函数基于ggplot2并支持使用图形语法


绘图示例


1、下载安装ggtreeExtra包

if(!requireNamespace("remotes", quietly=TRUE)){   install.packages("remotes")}remotes::install_github("YuLab-SMU/ggtreeExtra")if (!requireNamespace("BiocManager", quietly=TRUE))   install.packages("BiocManager")BiocManager::install("ggtreeExtra")BiocManager::install("ggstar")# 下载"ggstar","ggplot2","ggtree","treeio","ggnewscale"包install.packages("ggstar")install.packages("ggplot2")install.packages("ggtree")install.packages("treeio")install.packages("ggnewscale")


2、加载依赖包

library(ggtreeExtra) # 设置叠加的包library(ggstar) # 提供几何图形library(ggplot2) # library(ggtree) # 绘制进化树library(treeio)library(ggnewscale) # 创建新的scale,多个fill或者color

3、设置工作目录

setwd("D:/R/ggtreeExtra")

4数据来源

# 树状图数据来源路径trfile <- system.file("extdata", "tree.nwk", package="ggtreeExtra")# 绘制点图和柱状图的数据来源路径tippoint1 <- system.file("extdata", "tree_tippoint_bar.csv", package="ggtreeExtra")# 树外第一层的绘制热图来数据源路径ring1 <- system.file("extdata", "first_ring_discrete.csv", package="ggtreeExtra")# 树外第二层的绘制热图来数据源路径ring2 <- system.file("extdata", "second_ring_continuous.csv", package="ggtreeExtra")


5、获取数据

树文件是使用 read . tree 导入的。如果有其他树格式的文件,可以使用 tree io 包的相应函数来读取.

tree <- read.tree(trfile)data = fortify(tree)head(data)


6、绘制树状图

# 可视化进化树,这里图形选用的是"fan",还可以是 'rectangular', 'dendrogram', 'slanted', 'ellipse', 'roundrect', 'circular', 'circular', 'inward_circular', 'radial', 'equal_angle', 'daylight' or 'ape'p <- ggtree(tree, layout="fan", open.angle=10, size=0.5)p

7、获取数据集绘制图

dat1 <-read.csv(tippoint1)knitr::kable(head(dat1))dat2 <-read.csv(ring1)knitr::kable(head(dat2))dat3 <-read.csv(ring2)knitr::kable(head(dat3))head(dat3)

dat1数据集用来绘制成点和条形图


dat2数据集用于绘制热图


dat3数据集用于绘制热图


a、绘制点图层

p2 <-p + geom_fruit(data=dat1,geom=geom_star,mapping=aes(y=ID,fill=Location,size=Length,starshape=Group),position="identity",starstroke=0.2   ) + scale_size_continuous(range=c(1,3), # 大小范围guide=guide_legend(keywidth=0.5,   # 箱体宽度0.5Keyheight=0.5, # 箱体宽度0.5override.aes=list(starshape=15),order=2    )   ) +scale_fill_manual(values=c("#F8766D", "#C49A00", "#53B400", "#00C094", "#00B6EB", "#A58AFF", "#FB61D7"),guide="none"   ) + scale_starshape_manual(values=c(1,15),guide=guide_legend(keywidth=0.5,keyheight=0.5,order=1    )   )p2


b、绘制热图层

p3 <- p2 +    new_scale_fill() +    geom_fruit(    data=dat2,    geom=geom_tile,    mapping=aes(y=ID, x=Pos, fill=Type),offset=0.08,   # 外部层之间的距离,默认为树的 x 范围的0.03倍。pwidth=0.25   # 外部层的宽度,默认为树的 x 范围的0.2倍。   ) +    scale_fill_manual(    values=c("#339933", "#dfac03"),guide=guide_legend(keywidth=0.5,keyheight=0.5, order=3)   ) p3


c、绘制热图层

p4 <-p3 + new_scale_fill() +geom_fruit(data=dat3,geom=geom_tile,mapping=aes(y=ID,x=Type2,alpha=Alpha,fill=Type2),pwidth=0.15,axis.params=list(axis="x", # 添加图层的轴文本text.angle=-45, #x 轴的文本角度hjust=0   # 调整文字轴的水平位置    )   ) +scale_fill_manual(values=c("#b22222", "#005500", "#0000be", "#9f1f9f"),guide=guide_legend(keywidth=0.5,keyheight=0.5,order=4)   ) +scale_alpha_continuous(range=c(0,0.4), # alpha的范围guide=guide_legend(keywidth=0.5,keyheight=0.5,order=5)   ) p4


d、绘制柱状图层

p5 <-p4 + new_scale_fill() +geom_fruit(data=dat1,geom=geom_bar,mapping=aes(y=ID,x=Abundance,fill=Location),   # dat1Abundance将被映射到 xpwidth=0.4,stat="identity",orientation="y", # 轴的方向axis.params=list(axis="x", # 添加图层的轴文本text.angle=-45, # 轴的文字大小hjust=0   # 调整轴文本的水平位置    ),grid.params=list() # 添加外部条形图的网格线   ) + scale_fill_manual(values=c("#F8766D", "#C49A00", "#53B400", "#00C094", "#00B6EB", "#A58AFF", "#FB61D7"),guide=guide_legend(keywidth=0.5,keyheight=0.5,order=6)   ) +theme(#legend.position=c(0.96,0.5), # 图例位置legend.background=element_rect(fill=NA), # 图例背景legend.title=element_text(size=7), # 图例标题大小legend.text=element_text(size=6), # 图例文本标签大小legend.spacing.y = unit(0.02, "cm")   # 调节y轴图例的距离   ) p5


END



关注下方公众号,获取更多精彩

作图帮
作图帮
免费分享科研作图软件及其使用方法,为科研助力!
公众号


首页          产品专区          服务支持          品牌介绍          新闻活动
联系QQ:905381807
联系电话:027-65528997
联系邮箱:marketing@wefindbio.com