Maptree-层级结构数据展示的绝佳尝试
一般而言我们展示层级结构使用的是进化树。相关工具有很多,例如MEGAN,ggtree,iTOL,Graphlan等,这次要刷新认识了,Maptree;Maptree的中文介绍似乎不多,基...
一般而言我们展示层级结构使用的是进化树。相关工具有很多,例如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专刊 肠道指挥大脑
文献阅读 热心肠 SemanticScholar Geenmedical
16S功能预测 PICRUSt FAPROTAX Bugbase Tax4Fun
生物科普: 肠道细菌 人体上的生命 生命大跃进 细胞暗战 人体奥秘
写在后面
为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。
学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
更多推荐
所有评论(0)