library(igraph)
(1) 原始数据准备
from<-c(“a”,“a”,“e”,“b”,“b”,“c”,“d”,“d”,“d”,“f”)
to<-c(“c”,“e”,“c”,“e”,“c”,“d”,“g”,“g”,“f”,“d”)
data<-data.frame(from=from,to=to)
data
(labels<-union(unique(data[,1]),unique(data[,2])))
ids<-1:length(labels)
names(ids)<-labels;ids
from<-as.character(data[,1]);to<-as.character(data[,2])
edges<-matrix(c(ids[from],ids[to]),ncol=2)
edges
(2) 建立关系网络
library(igraph)
g<-graph.empty(directed=F)
g<-add.edges(g,t(edges))
E(g)weight<−count.multiple(g);E(g)weight<−count.multiple(g);E(g)weight
g<-simplify(g,remove.multiple=TRUE,remove.loops=TRUE,edge.attr.comb=“mean”)
E(g)weight ## [1] 1 1 1 1 1 1 2 2 # 这里的count.multiple(g)用于计算网络g中每条线的重复数。使用simplify函数把图中重复的线删除(remove.multiple=TRUE),并使用重复的次数来更新线权重E(g)weight ## [1] 1 1 1 1 1 1 2 2 # 这里的count.multiple(g)用于计算网络g中每条线的重复数。使用simplify函数把图中重复的线删除(remove.multiple=TRUE),并使用重复的次数来更新线权重E(g)weight(edge.attr.comb=“mean”)
自此,就建立了一个完整的关系网络g。下面提取上述代码中的部门对象作为参数,并给出一段自定义的函数init.igraph用户建立关系网络
init.graph<-function(data,dir=F,rem.multi=T){
labels<-union(unique(data[,1]),unique(data[,2]))
ids<-1:length(labels);names(ids)<-labels
from<-as.character(data[,1]);to<-as.character(data[,2])
edges<-matrix(c(ids[from],ids[to]),ncol=2)
g<-graph.empty(directed=dir)
g<-add.vertices(g,length(labels))
V(g)label<-labels g<-add.edges(g,t(edges)) if(rem.multi){ E(g)KaTeX parse error: Expected 'EOF', got '}' at position 109: …comb="mean") }̲ g } 这里的参数dat…weight<-count.multiple(g) g<-simplify(g,remove.multiple=TRUE,remove.loops=TRUE,edge.attr.comb=“mean”) } g } 这里的参数data是包括点名称以及线数据的数据框。并且分为from列和to列。例如: from<-c(“a”,“a”,“e”,“b”,“b”,“c”,“d”,“d”,“d”,“f”) to<-c(“c”,“e”,“c”,“e”,“c”,“d”,“g”,“g”,“f”,“d”) data<-data.frame(from=from,to=to) 参数dir是逻辑变量,设为TRUE时,表示建立有向图,否则是无向图。参数rem.multi是逻辑变量,设为TRUE时,表示删除重复变量并更新线权重weight,否则不删除并且线权重weight恒为1。 (3) 基础概念的R语言实现 依次使用init.graph函数建立无向图和有向图,并使用plot函数绘制图像。代码如下: par(mfcol=c(1,2)) g.undir<-init.graph(data) plot(g.undir,edge.width=E(g.undir)weight,main=“无向图 g.undir”,
edge.label=E(g.undir)weight)g.undir<−init.graph(data,dir=T)plot(g.undir,edge.width=E(g.undir)weight)g.undir<−init.graph(data,dir=T)plot(g.undir,edge.width=E(g.undir)weight,main=“有向图 g.undir”,
edge.label=E(g.undir)$weight)
par(mfcol=c(1,1))
这里通过设置plot函数的edge.width参数为E(g)$weight,使得权重较高的线更粗.