iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >R包ggtreeExtra绘制进化树
  • 379
分享到

R包ggtreeExtra绘制进化树

2024-04-02 19:04:59 379人浏览 八月长安
摘要

目录引言绘图示例1、下载安装ggtreeExtra包2、加载依赖包3、设置工作目录4、数据来源5、获取数据6、绘制树状图7、获取数据集绘制图a、绘制点图层b、绘制热图层c、绘制热图层

引言

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绘制进化树的资料请关注编程网其它相关文章!

--结束END--

本文标题: R包ggtreeExtra绘制进化树

本文链接: https://www.lsjlt.com/news/152548.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作