【问题标题】:Network plotting with igraph in R - differntiating vertices and edges在 R 中使用 igraph 进行网络绘图 - 区分顶点和边
【发布时间】:2014-08-17 17:28:40
【问题描述】:

我正在努力使用 igraph 与 R 进行一些社交网络映射。我想制作一个图表,显示当地代表(例如比尔)与他们所在地区的个人和行政机构的关系。我已经能够使用graph.data.frame 中的以下内容为比尔和他的联系人绘制顶点:

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) 

但要么收到错误消息,要么没有任何变化。我还想通过权重区分不同颜色的边缘,以使用权重变量表示比尔的直接或间接联系人。

任何关于我如何增强比尔的情节或我是否应该使用不同的数据框的指导将不胜感激。

【问题讨论】:

  • 请发布足够的代码来重现您正在做的事情。 V(g)$color &lt;- ifelse(V(g) 当然会出错,因为它缺少 ) 并且只将一个参数传递给 ifelse 函数,该函数需要 3 个参数。
  • 很抱歉没有提供足够的信息。我一直在尝试: > V(g )$color-ifelse ( V ( g ) $ associate == "y" , " green " , " orange " ) > plot(g,

标签: r igraph


【解决方案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)

产生

【讨论】:

  • 抱歉,我已经尝试多次应用此解决方案(并且有多种变体),但是当我输入时:V(gg)[dd$contact]$associate [.igraph.vs(*tmp*, dd$contact) 中的错误:顶点 seq 的无效索引使用@jlhoward 的建议绘制权重虽然效果很好(非常感谢)。
  • @Curious56 确保您的contact 列是一个字符而不是一个因素。我添加了一个 data.frame,您可以复制并粘贴它以重新创建输出。
  • 弗利克先生非常感谢您回来。你所说的data.frame是指#sample data下面的代码吗?
  • @Curious56 是的。如果您将其复制/粘贴到 R 中,它应该使用我读取数据的方式创建一个名为 dd 的 data.frame(无因素)
  • 太棒了——它有效!再次感谢,是的,我确实需要了解有关 data.frame 构造的更多信息。
猜你喜欢
  • 2018-09-24
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多