R包ggtreeExtra绘制进化树
更新时间:2022年6月24日 13:08 点击:539 作者:维凡生物
引言
ggplot2提供的geom_tile图层可以画热图了,ggplot2的geom_point或者ggstar的geom_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.5 Keyheight=0.5, # 箱体宽度0.5 override.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), # dat 1的Abundance将被映射到 x pwidth=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
以上就是R包ggtreeExtra绘制进化树的详细内容,更多关于R包ggtreeExtra绘制进化树的资料请关注猪先飞其它相关文章!
原文出处:https://www.jianshu.com/p/6400c9c338c1
相关文章
- 本篇文章是对GDI+简单绘图的绘图知识进行了详细的分析介绍,需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了将matplotlib绘图嵌入pyqt的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-27
intellij idea如何将web项目打成war包的实现
这篇文章主要介绍了intellij idea如何将web项目打成war包的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-04- 这篇文章主要介绍了idea+maven打jar包的两种方式,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-16
- 这篇文章主要为大家介绍了R语言进行绘图时输出希腊字符上标,下标及数学公式的实现方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2021-11-06
- 这篇文章主要介绍了使用idea远程调试jar包的配置过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-26
- 这篇文章主要介绍了使用matplotlib的pyplot模块绘图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-12
- 这篇文章主要介绍了如何用R语言绘制饼图和条形图,帮助大家更好的理解和学习使用R语言,感兴趣的朋友可以了解下...2021-05-06
- 今天来给大家分享一篇教程关于R语言绘制Vonoroi图的完整代码,包括deldir包绘制Voronoi图,ggplot2绘制Voronoi图的实现代码,感兴趣的朋友跟随小编一起看看吧...2021-06-21
- 这篇文章主要介绍了maven工程中jar包瘦身的五种方法,帮助大家更好的理解和使用maven,感兴趣的朋友可以了解下...2021-02-06
VML绘图板②脚本--VMLgraph.js、XMLtool.js
脚本 ************* * VMLgraph.js ************* var xo=0; var yo=0; var ox=80; var oy=20; var dx=0; var dy=0; var drawKey = false; var itemID = 0; var Shap...2016-11-25- 这篇文章主要介绍了教你怎么用Idea打包jar包,文中有非常详细的代码示例,对刚开始使用IDEA的小伙伴们很有帮助哟,需要的朋友可以参考下...2021-05-12
- 这篇文章主要介绍了C#打印绘图的实现方法,涉及C#针对图片的绘制与打印相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Python如何绘制组合图,帮助大家更好的利用python绘制图像,进行数据可视化分析,感兴趣的朋友可以了解下...2020-09-17
- 本篇文章是对GDI的基础知识进行了详细的分析介绍,需要的朋友参考下...2020-06-25
解决使用Spyder IDE时matplotlib绘图的显示问题
这篇文章主要介绍了解决使用Spyder IDE时matplotlib绘图的显示问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-24- 这篇文章主要介绍了IDEA创建Java项目导出Jar包运行,需要的朋友可以参考下...2021-01-06
- 这篇文章主要介绍了SpringBoot解决jar包冲突的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-27
- 这篇文章主要介绍了JavaScript 绘制饼图的示例,帮助大家更好的利用JavaScript绘制图表,感兴趣的朋友可以了解下...2021-02-20
- 前两篇已经基本向大家介绍了绘图的基本知识.那么,我就用我们上两篇所学的,做几个例子.我们先来做一个简单的--仿QQ截图...2020-06-25