一般而言我们展示层级结构使用的是进化树。相关工具有很多,例如MEGAN,ggtree,iTOL,Graphlan等,这次要刷新认识了,Maptree;Maptree的中文介绍似乎不多,基于R语言绘制相关图表资料较少。最近science的图表中第一幅主图使用Maptree展示,让我们惊艳到了。Science:病原菌激活植物内生菌群的抑病功能。通过宏基因组提取16S rRNA基因序列注释细菌群落并统计不同门类细菌差异,最大的圈代表门水平,逐渐缩小的圈按照梯度分别代表纲、科、属。不同颜色标记处差异的微生物。相比于我们graphlan别有一番趣味。这里带大家一起探索这个图表的奥秘。

1

Maptree

圆形填充表示层次结构:最大的圆圈(层次结构的起点)包含几个大圆圈(级别1),其中包含较小的圆圈(级别2),依此类推。等等。最后一个级别称为叶。

输入数据是节点之间的边的数据框和节点的数据框文件。边文件有两列,这两列的每一行有一个包含关系。如果A被B包含,B被C包含,那么C包含A。这样的一对数字则构成了我们做Maptree的原始输入。

  • 边文件格式要求 


  • 节点文件即为全部节点即可。

2

通过一个简单的实例我们来进行一个基本了解

有关ggraph包我们在志气啊已经进行过介绍:参见。igraph包作为最大牌的网络图工具值得大家进行学习,具体参见.

通过vertices参数指定节点的属性,这里通过增加vertices列的数量来添加任何属性,包括需要映射的颜色,形状,大小等等。

# 载入包
library(ggraph)
library(igraph)
library(tidyverse)
 
# 提取边文件
edges <- flare$edges
 
# 提取节点文件
vertices <- flare$vertices
 
# 构建igraph对象
mygraph <- graph_from_data_frame( edges, vertices=vertices )
 
# 出图
ggraph(mygraph, layout = 'circlepack') +
  geom_node_circle() +
  theme_void()

3

布局转化

这一图形同一下图形之间是可以轻松转化的,只需要修改layout参数。

ggraph(mygraph, layout='dendrogram', circular=TRUE) +
  geom_edge_diagonal() +
  theme_void() +
  theme(legend.position="none")

4

类似树图的展示

这种方式展示树图让让不同分支产生了流动的效果。

ggraph(mygraph, layout='dendrogram', circular=FALSE) +
  geom_edge_diagonal() +
  theme_void() +
  theme(legend.position="none")

5

将圈树转化为水平展示

设置circular=T参数,默认设置。

ggraph(mygraph,'treemap', weight = 'size') +
  geom_node_tile(aes(fill = depth), size = 0.25) +
  theme_void() +
  theme(legend.position="none")

ggraph(mygraph, 'partition', circular = TRUE) +
  geom_node_arc_bar(aes(fill = depth), size = 0.25) +
  theme_void() +
  theme(legend.position="none")

6

使用igeaph网络布局展示

ggraph(mygraph) +
  geom_edge_link() +
  geom_node_point() +
  theme_void() +
  theme(legend.position="none")

7

配色和标签设置


# 载入包
library(tidyverse)
library(viridis)

# 同样导入边和节点数据
edges=flare$edges
vertices = flare$vertices
str(edges)
head(edges)
##构造网络对象
mygraph <- graph_from_data_frame( edges, vertices=vertices )

出图函数是ggraph,提供将igraph对象通过layout的定义转换为相应的ggplot坐标并输出数据框。这很重要,因为后面的geom都是基于这个数据框来出图的。出图函数geom_node_circle:同ggplot2中的geom对象一样的用法。不过这里的depth似乎不太好理解,因为这是转化后的自带列名。作用时将maptreee按照登记分为几个部分。填充上对应的数字。从0开始逐渐递增代表了层级越来越低。本次通过depth来对图形进行填充颜色。scale_fill_manual用于指定填充颜色,values指定颜色,这是一组向量,需要使用目标填充列对颜色进行署名,来指定对应的颜色。scale_color_manual来定义边框颜色,这里除了最外层,都被设置成黑色了。

# Hide the first level (right)
ggraph(mygraph, layout = 'circlepack', weight="size") +
  geom_node_circle(aes(fill = as.factor(depth), color = as.factor(depth) )) +
  scale_fill_manual(values=c("0" = "white", "1" = viridis(4)[1], "2" = viridis(4)[2], "3" = viridis(4)[3], "4"=viridis(4)[4])) +
  scale_color_manual( values=c("0" = "white", "1" = "black", "2" = "black", "3" = "black", "4"="black") ) +
  theme_void() +
  theme(legend.position="FALSE")
# Second one: hide 2 first levels

更改配色我们就很轻易得到了下面的图形:

ggraph(mygraph, layout = 'circlepack', weight="size") +
  geom_node_circle(aes(fill = as.factor(depth), color = as.factor(depth) )) +
  scale_fill_manual(values=c("0" = "white", "1" = "white", "2" = magma(4)[2], "3" = magma(4)[3], "4"=magma(4)[4])) +
  scale_color_manual( values=c("0" = "white", "1" = "white", "2" = "black", "3" = "black", "4"="black") ) +
  theme_void() +
  theme(legend.position="FALSE")

8

添加标签

geom_node_text用于添加标签,使用方法和geom_text类似。

# 重现导入边和节点数据,方便重复
edges <- flare$edges %>%
  filter(to %in% from) %>%
  droplevels()
vertices <- flare$vertices %>%
  filter(name %in% c(edges$from, edges$to)) %>%
  droplevels()
vertices$size <- runif(nrow(vertices))

# 构造对象
mygraph <- graph_from_data_frame( edges, vertices=vertices )

ggraph(mygraph, layout = 'circlepack', weight="size" ) +
  geom_node_circle(aes(fill = depth)) +
  geom_node_text( aes(label=shortName, filter=leaf, fill=depth, size=size)) +
  theme_void() +
  theme(legend.position="FALSE") +
  scale_fill_viridis()

reference

https://www.r-graph-gallery.com/313-basic-circle-packing-with-several-levels.html

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘  

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐