作者简介: 本文作者系大学统计学专业教师,多年从事统计学的教学科研工作,在随机过程、统计推断、机器学习领域有深厚的理论积累与应用实践。
igraph是一套用于网络分析与可视化的r包,它以高效、便捷、使用简单的特点在网络分析研究中广泛采用。igraph可以在R环境下免费下载安装,目前也有Python实现的igraph. 本文将介绍如何使用igraph包进行基础的网络分析与可视化。
1. igraph 网络
首先,清除R环境里的所有对象后,加载igraph包。
rm(list = ls())
library(igraph)
1.1 产生一个网络
我们产生一个有3个结点的无向图。它的结点用1, 2, 3表示,边分别是1–>2, 2–>3, 3–>1.
g1 <- graph( edges=c(1,2, 2,3, 3, 1), n=3, directed=F )
plot(g1)
g1是一个igraph对象。现在,我们生成一个10结点的有向图。
g2 <- graph( edges=c(1,2, 2,3, 3, 1), n=10 )
plot(g2)
g3 <- graph( c("John", "Jim", "Jim", "Jill", "Jill", "John"))
plot(g3)
g4 <- graph( c("John", "Jim", "Jim", "Jack", "Jim", "Jack", "John", "John"),
isolates=c("Jesse", "Janis", "Jennifer", "Justin") )
plot(g4, edge.arrow.size=.5, vertex.color="gold", vertex.size=15,
vertex.frame.color="gray", vertex.label.color="black",
vertex.label.cex=0.8, vertex.label.dist=2, edge.curved=0.2)
下面的代码生成不同风格的图。
plot(graph_from_literal(a---b, b---c))
plot(graph_from_literal(a--+b, b+--c))
plot(graph_from_literal(a+-+b, b+-+c))
plot(graph_from_literal(a:b:c---c:d:e))
gl <- graph_from_literal(a-b-c-d-e-f, a-g-h-b, h-e:f:i, j)
plot(gl)
1.2 边、结点与网络属性
显示边与结点
E(g4)
+ 4/4 edges (vertex names): [1] John->Jim Jim ->Jack Jim ->Jack John->John
V(g4)
+ 7/7 vertices, named: [1] John Jim Jack Jesse Janis Jennifer Justin
显示网络矩阵
g4[]
g4[1,]
V(g4)$name
1.3 图与图模型
空图
eg <- make_empty_graph(40)
plot(eg, vertex.size=10, vertex.label=NA)
完全图
fg <- make_full_graph(40)
plot(fg, vertex.size=10, vertex.label=NA)
星型图
st <- make_star(40)
plot(st, vertex.size=10, vertex.label=NA)
树型图
tr <- make_tree(40, children = 3, mode = "undirected")
plot(tr, vertex.size=10, vertex.label=NA)
环形图
rn <- make_ring(40)
plot(rn, vertex.size=10, vertex.label=NA)
Erdos-Renyi 随机图
er <- sample_gnm(n=100, m=40)
plot(er, vertex.size=6, vertex.label=NA)
Watts-Strogatz small-world model
sw <- sample_smallworld(dim=2, size=10, nei=1, p=0.1)
plot(sw, vertex.size=6, vertex.label=NA, layout=layout_in_circle)
Rewiring a graph
each_edge() 是一个rewiring方法,它以概率prob均匀地随机改变边的终端,即,重新定义边。
rn.rewired <- rewire(rn, each_edge(prob=0.1))
plot(rn.rewired, vertex.size=10, vertex.label=NA)
未完待续
|