美文网首页js css html
可视化:Arc Diagrams

可视化:Arc Diagrams

作者: 生信云笔记 | 来源:发表于2022-12-24 13:47 被阅读0次

      弧线图(Arc Diagrams)是一种在一维布局中可视化网络的方法,主要特征是沿单轴显示节点,同时用弧线表示节点之间的边或连接,同时边的粗细可以表示连接的权重。特别是在想展示同一条染色体上基因之间的关联性时,用此图绝不失为一个好的方法。

    安装 arcdiagram

      首先,安装一下专门用于画弧线图的包arcdiagram,该包在github上没有发布版本,所以可以通过devtools来安装:

    library(devtools)
    
    install_github('gastonstat/arcdiagram')
    

    示例数据

      这里使用的数据来自arcdiagram包的github里面,是一个gml格式的文件,gml是igraph对象的一种存储格式,我们可以用igraph包来读取:

    library(igraph)
    
    # 下载数据
    download.file('https://github.com/gastonstat/arcdiagram/blob/master/lesmiserables.gml', 'lesmiserables.gml')
    
    mis_graph <- read.graph('lesmiserables.gml', format="gml")
    
    # 查看网络对象
    mis_graph
    IGRAPH bc6aae4 U--- 77 254 --
    + attr: id (v/n), label (v/c), group (v/n), fill (v/c), border (v/c),
    | value (e/n)
    + edges from bc6aae4:
     [1]  1-- 2  1-- 3  1-- 4  3-- 4  1-- 5  1-- 6  1-- 7  1-- 8  1-- 9  1--10
    [11] 11--12  4--12  3--12  1--12 12--13 12--14 12--15 12--16 17--18 17--19
    [21] 18--19 17--20 18--20 19--20 17--21 18--21 19--21 20--21 17--22 18--22
    [31] 19--22 20--22 21--22 17--23 18--23 19--23 20--23 21--23 22--23 17--24
    [41] 18--24 19--24 20--24 21--24 22--24 23--24 13--24 12--24 24--25 12--25
    [51] 25--26 24--26 12--26 25--27 12--27 17--27 26--27 12--28 24--28 26--28
    [61] 25--28 27--28 12--29 28--29 24--30 28--30 12--30 24--31 31--32 12--32
    + ... omitted several edges
    
    # 准备绘图数据
    # 获取边
    edgelist <- get.edgelist(mis_graph)
    # 获取顶点标签
    vlabels <-  get.vertex.attribute(mis_graph, "label")
    # 获取顶点分组信息
    vgroups <-  get.vertex.attribute(mis_graph, "group")
    # 获取顶点填充色
    vfill <-  get.vertex.attribute(mis_graph, "fill")
    # 获取顶点边的颜色
    vborders <-  get.vertex.attribute(mis_graph, "border")
    # 获取顶点权重
    degrees <-  degree(mis_graph)
    # 获取边权重
    values <-  get.edge.attribute(mis_graph, "value")
    

      简单介绍一下igraph对象,例如上面的mis_graph就是一个igraph对象。我们可以从该对象的概要里面获取到如下信息:bc6aae4 是这个对象的名称,U--- 77 254 --这里的U(亦或DNW,表示有向、有命名且加权的网络)表示该对象包含一个无向网络,后面数字表示该网络有77个节点和254条边。该对象具有的节点属性是id、group、fill、border,具有的边属性是value。最下面的内容就是该对象具体包含的关系对。

    绘图

      准备好数据,绘图就水到渠成了,只需执行arcplot函数即可,参数还是很多的,大家可以根据需要自行调整。

    library(arcdiagram)
    
    arcplot(edgelist, labels=vlabels, cex.labels=0.8,
            show.nodes=TRUE, col.nodes=vborders, bg.nodes=vfill,
            cex.nodes = log(degrees)+0.5, pch.nodes=21,
            lwd.nodes = 1, line= 0.5,
            col.arcs = hsv(0, 0, 0.2, 0.25), lwd.arcs = 1.2 * values)
    

    结构如下:

    排序

      当然,我们也可以先对数据排个序,比如按照分组信息排序,这样一个分组内的顶点就会挨在一起按照大小排列,这样更有助于数据之间的比较。

    x <- data.frame(vgroups, degrees, vlabels, ind=1:vcount(mis_graph))
    y <- x[order(x$vgroups, x$degrees, decreasing=T), ]
    new_ord <- y$ind
    
    arcplot(edgelist, ordering=new_ord, labels=vlabels, cex.labels=0.8,
            show.nodes=TRUE, col.nodes=vborders, bg.nodes=vfill,
            cex.nodes = log(degrees)+0.5, pch.nodes=21,
            lwd.nodes = 1, line=0.5,
            col.arcs = hsv(0, 0, 0.2, 0.25), lwd.arcs = 1.2 * values)
    

    结果如下:

    结束语

      arcdiagram包绘图还是挺容易的,可能准备好相应的数据更费事一些,所以有空还是得学习一个igraph对象相关内容。好了,绘图的事到此为止。说点别的,比如能发这个帖子至少说明小编今天还没有“变声成羊”。不得不说,新冠的传染性还真是厉害,不到一周的时间办公室里面七八成的人都感染了。虽然毒性没有那么强,但是没法预测自身感染的症状是否激烈,所以一些退烧止咳缓解疼痛的药还是要买的。而现实的状况可能却是另外一回事,由于短时间内需求的急剧飙升导致供不应求,一药难求。哎,原来布洛芬有这么多种姿势,奇怪的知识又增加了。此刻,很想练一下久阴真经。。。

    参考资料

    https://www.r-bloggers.com/2013/02/arc-diagrams-in-r-les-miserables

    往期回顾

    可视化:circular dendrogram
    可视化:和弦图
    LACE-seq 保姆级教程
    可视化:两种方法绘制桑基图
    可视化:density与ridgeline

    相关文章

      网友评论

        本文标题:可视化:Arc Diagrams

        本文链接:https://www.haomeiwen.com/subject/rqmbqdtx.html