R语言中的igraph包绘制网络图

本文转自网络。

R语言中的igraph包可以很方便地画出网络图,在社交关系分析等领域发挥重要作用,下面介绍包中一个重要的函数graph_from_data_frame()。

graph_from_data_frame(d, directed = TRUE, vertices = NULL)

参数解释

(1)d: 格式为数据框,用来指定边序列;

(2)directed: 用于指定生成有向图(TRUE)还是无向图(FALSE),默认TRUE;

(3)vertices: 格式为数据框,用于指定节点属性,默认NULL;

  • 如果vertices没有指定(NULL),默认将数据框d的前两列作为边序列,其他列作为边的属性,节点的名称name按照边序列来确定;

  • 如果vertices被指定为某数据框a,则将d的前两列作为边序列,其他列作为边的属性;将a的第一列作为节点名称(name),a的剩余列作为节点的其他属性,同时应注意一旦vertices被指定,那么d中指定的边序列必须都包含在a的第一列中,例如:

R语言中的igraph包绘制网络图

关于igraph输出的说明可参见:http://127.0.0.1:13971/library/igraph/html/print.igraph.html

实例

(1)选取gcookbook包中的数据集madmen,绘制无向图g

R语言中的igraph包绘制网络图

(2)可以发现,上图整体比较乱,标签之间出现大量重叠,因此进一步修改。

R语言中的igraph包绘制网络图

V()函数和vertex.XXX可以设置或获取节点vertices的属性;

E()函数和edge.XXX可以设置或获取边edge的属性。

上例中,第一行设置这个图形的属性;vertex.size=4设置节点大小;第三行中,虽然边和节点可能都有名字,但默认时这些名字可能没有被当做标签,因此需要给vertex.label参数传递一个命名向量;vertex.label.cex=0.7设置标签字体大小;vertex.label.dist=0.4,设置节点和标签的距离,便于错开重叠;vertex.label.color设置标签颜色。

R语言中的igraph包绘制网络图

上例中通过vertex.XXX的形式向plot函数传递参数后再输出,可以直接利用V()h函数,效果是等价的。

 

R语言中的igraph包绘制网络图

同样,也可以设置边的属性

R语言中的igraph包绘制网络图

R语言中的igraph包绘制网络图

上例中,E(g)表示查看边;E(g)[c(2,11,19)]$label设置第(2,11,19)边的标签,然后将所有边的颜色设置为灰色后,再把第(2,11,19)边设置为红色,宽度为2,最后以圆圈布局。

具体的参数设置可以查看帮助文档(?graph.plotting):http://127.0.0.1:13971/library/igraph/html/igraph.plotting.html