我正在努力与R使用igraph进行一些社交网络映射。我想制作一个情节,显示当地代表(例如比尔)与其所在地区的个人和行政机构之间的关系。我已经能够使用graph.data.frame
中的以下内容为Bill和他的边缘联系人绘制顶点:
who contact weight associate
Bill district 1 y
Bill region 2 n
Bill village A 1 y
Bill village B 2 n
Bill social worker 1 n
Bill steve 1 y
Bill church 2 n
Bill jane 1 y
Bill village A Admin 1 n
Bill village B Admin 1 n
我想用颜色区分顶点,看它们是否是比尔的同伙之一。我试过了
V(g)$color <- ifelse(V(g)
但是收到错误消息或没有任何更改。我还想按权重区分不同颜色的边缘,以使用权重变量来表示Bill的直接或间接联系。
关于如何增强Bill的情节或是否应该使用不同的数据帧的任何指导将不胜感激。
答案 0 :(得分:1)
您的“关联”代码无法正常工作的原因是当您执行graph.data.frame
时,额外属性会与您提供的边缘一起存储,而不是顶点。以下是如何添加顶点信息(并使用@ jlhoward的建议绘制权重)
#sample data
dd <- structure(list(who = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L), .Label = "Bill", class = "factor"), contact = c("district",
"region", "villageA", "villageB", "socialworker", "steve", "church",
"jane", "villageAAdmin", "villageBAdmin"), weight = c(1L, 2L,
1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L), associate = c("y", "n", "y",
"n", "n", "y", "n", "y", "n", "n")), .Names = c("who", "contact",
"weight", "associate"), row.names = c(NA, -10L), class = "data.frame")
现在是代码
library(igraph)
gg <- graph.data.frame(dd[,1:3])
V(gg)[dd$contact]$associate <- dd$associate
V(gg)$color <- ifelse(V(gg)$associate=="y", "green","orange")
plot(gg,edge.color=E(gg)$weight)
产生