R展示层级数据(桑基/旭日/珠包/Treemap图等)

我自己在用R做各种分析时有不少需要反复用到的基础功能,比如一些简单的统计呀,画一些简单的图等等,虽说具体实现的代码也不麻烦,但还是不太想每次用的时候去找之前的代码。

索性将常用的各种函数整成了一个包:pcutils
网址:https://github.com/Asa12138/pcutils

从CRAN安装:

install.packages("pcutils")

但目前还是建议从github安装,包含的功能会多一些:

install.packages("devtools")
devtools::install_github('Asa12138/pcutils',dependencies=T)

Introduction

层级数据展示是数据分析中常有的需求,比如物种分类等级,KEGG功能层次等。

我们以下列test数据为例,这是一个物种分类等级的表格。表格从左到右具有包含关系,最后一列是物种的丰度:

data(otutab)
cbind(taxonomy, num = rowSums(otutab))[1:10, ] -> test
KingdomPhylumClassOrderFamilyGenusSpeciesnum
k__Bacteriap__Actinobacteriac__Actinobacteriao__Actinomycetalesf__Thermomonosporaceaeg__un_f__Thermomonosporaceaes__un_f__Thermomonosporaceae26147
k__Bacteriap__Proteobacteriac__Betaproteobacteriao__Burkholderialesf__Comamonadaceaeg__Pelomonass__Pelomonas_puraquae25217
k__Bacteriap__Proteobacteriac__Gammaproteobacteriao__Pseudomonadalesf__Pseudomonadaceaeg__Rhizobacters__Rhizobacter_bergeniae16592
k__Bacteriap__Bacteroidetesc__Flavobacteriiao__Flavobacterialesf__Flavobacteriaceaeg__Flavobacteriums__Flavobacterium_terrae16484
k__Bacteriap__Proteobacteriac__Gammaproteobacteriao__Pseudomonadalesf__Pseudomonadaceaeg__Rhizobacters__un_g__Rhizobacter13895
k__Bacteriap__Proteobacteriac__Betaproteobacteriao__Burkholderialesf__un_o__Burkholderialesg__un_o__Burkholderialess__un_o__Burkholderiales10937
k__Bacteriap__Actinobacteriac__Actinobacteriao__Actinomycetalesf__Streptomycetaceaeg__Streptomycess__un_g__Streptomyces10813
k__Bacteriap__Actinobacteriac__Actinobacteriao__Actinomycetalesf__Pseudonocardiaceaeg__Lentzeas__Lentzea_flaviverrucosa9508
k__Bacteriap__Actinobacteriac__Actinobacteriao__Actinomycetalesf__Micromonosporaceaeg__Actinoplaness__un_g__Actinoplanes8518
k__Bacteriap__Proteobacteriac__Alphaproteobacteriao__Rhizobialesf__Rhizobiaceaeg__Rhizobiums__un_g__Rhizobium7789

我们有很多种方法来展示这种类型的层次数据,比如桑基图,旭日图,包珠图,Treemap等。

桑基图

桑基图(Sankey diagram)是一种常用的层次数据展示方法,它通过使用有向连接不同的节点来显示流动的路径和量级。

  1. 使用sankeyD3包绘制桑基图:
my_sankey(test,mode = "sankeyD3")

  1. 使用ggsankey包绘制桑基图:
my_sankey(test, mode = "ggsankey", space = 1e4)

旭日图

旭日图(sunburst)是饼图的变形,简单来说是多个饼图的组合升级版。饼图只能展示一层数据的占比情况,而旭日图不仅可以展示数据的占比情况,还能厘清多级数据之间的关系。

my_sunburst(test)

多层环图

多层环图是一种多层次数据展示方法,它将数据分成多个环,每个环代表一层数据。可以使用gghuan2函数绘制:

gghuan2(arrange_all(test[,c(1,2,7,8)]))+
    scale_fill_pc(n = 14)

包珠图

包珠图(Circular Packing),是一种比较特殊的分类树状图,以气泡之间的包含关系展示层级关系,以气泡面积(或半径)展示数值的大小。

my_circle_packing(test[,c(1,2,7,8)],show_level_name = T)+
    viridis::scale_fill_viridis(na.value = NA)+
    scale_color_pc(palette = "col2")

Treemap

Treemap是一种层次数据展示方法,它将数据分成矩形,矩形的大小代表数值的大小,矩形之间的包含关系代表层级关系。

my_treemap(test[,c(2,7,8)])

Voronoi Treemap

Voronoi Treemap是一种基于Voronoi tessellation的层次数据展示方法,它将数据分成多边形,多边形的边界代表数据之间的距离,多边形的面积代表数值的大小,多边形之间的包含关系代表层级关系。

my_voronoi_treemap(test[,c(2,7,8)])

树图

我在pctax包中提供了一个函数df2tree可以将层级数据转换为树结构数据(phylo对象),树图就可以用ggtree之类的包进行绘图,可以参考我之前介绍过的R绘制系统发育树的基本用法,进阶使用

# install.packages("pctax")
tr=pctax::df2tree(test[,1:7])
class(tr)
## [1] "phylo"
ggtree::ggtree(tr)+
    ggtree::geom_tiplab(size = 2)+
    ggtree::geom_nodepoint()

网络图

我在MetaNet包提供了将层级数据转换为网络图的功能,可以用MetaNet包进行绘图。

# install.packages("MetaNet")
go=MetaNet::df2net_tree(test)

par(mfrow=c(1,2))
plot(go,edge_width_range=c(0.5,0.5))
plot(go,MetaNet::as_circle_tree(),edge_width_range=c(0.5,0.5))

所有的可视化方法都是为展示数据服务的,
我整合这些函数也是希望可以更关注数据本身,花更少的精力在调节图形上,先快速对我们的数据有整体的把握。

pcutils的初衷还是迎合我自己的编程与数据分析习惯的,所以可能并不适合所有人,大家也可以直接fork并修改我的源码,欢迎大家提出建议与意见。

关注公众号,获取最新推送

关注公众号 ‘bio llbug’,获取最新推送。

  • 22
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值