R数据可视化igraph布局与绘
图是一种抽象的数学结构,不同对象之间通过线条连接起来,而对象在图中并没有固定的位置表示,不同的放置位置显示出的效果通常是不一样的。
选择一种优秀的布局方式,可以让图形呈现出更好的效果,而igraph的工作方式是通过一类node-edge的算法来进行布局的。
算法会将节点作为二维或三维空间上的点,使用直线或曲线来连接两个相邻的节点。对于有向图来说,带箭头的线表示连接方向。在边两端的节点可以由不同的几何图形来表示,而一些重要的节点或边的属性可以用来设置图形参数值。
图的可视化通常由三个步骤组成:
找到节点在二维或三维空间上合适的排列方式,这一步可能是最重要的。好的布局往往能够解释一些有趣的现象,如对称性、密集连接区域。从上面的图可以看出,第一个随机布局,完全看不出什么有价值的信息,而从第二和第三幅可以看出存在某些对称性
将节点和边的重要属性映射到图像上
安排好节点与边的绘制顺序
布局布局算法用于寻找合适的排列方式,但是找到优秀的排列确实不容易,因此,大部分的算法都是通过间接测量来评估布局的好坏。而且是一种启发式的方法来求解,所以并不是每次都能找到最优解。
大部分的布局算法只适用于较小的图,较大的图需要一些特殊技术来处理。
igraph中所有布局算法都是layout_*()形式,每个布局算法都会返回一个layout实例,类似列表型的对象,包含了每个节点在图中的x、y坐标。
布局函数
布局是通过plot()函数的layout参数来控制的,例如
我们随机生成一张图
g-sample_gnm(n=15,m=25)plot(g)
随机布局
plot(g,layout=layout_randomly)
圆形布局
plot(g,layout=layout_in_circle)
力导向布局,最常用的是Fruchterman-Reingold算法
plot(g,layout=layout_with_fr)
另一种比较常用的力导向算法KamadaKawai
plot(g,layout=layout_with_kk)
设置树状图
par(mfrow=c(1,3))tree-make_tree(20,3)plot(tree,layout=layout_as_tree)#自底向上plot(tree,layout=layout_as_tree(tree,flip.y=FALSE))#圆形排列plot(tree,layout=layout_as_tree(tree,circular=TRUE))
设置根节点
par(mfrow=c(1,2))tree2-make_tree(10,3)+make_tree(10,2)plot(tree2,layout=layout_as_tree)plot(tree2,layout=layout_as_tree(tree2,root=c(1,11),rootlevel=c(2,1)))
传递位置矩阵
g-sample_gnm(n=15,m=25)l-cbind(1:vcount(g),c(1,vcount(g):2))plot(g,layout=l)绘制图形
我们在前面的介绍中,都只用了plot()函数来绘制图形,所有的一切图形属性都是默认的,默认的颜色、大小、布局等。在我们设置了边和节点的颜色属性之后,图片才显示出了不同的颜色。
在这里,我们将介绍如何来调整节点和边的图形属性,igraph的绘制参数包括
我们以KEEE数据库中的ErbB信号通路中的EGF-ERBB2-RAS-ERK信号通路为例。
利用KEGG
转载请注明:http://www.sonphie.com/jibzd/14412.html