二分网络中的顶点属性igraph

时间:2018-03-22 09:40:13

标签: r attributes igraph bipartite

首先,如果这是一个简单的问题,我对R很新,所以道歉。

我有一个包含边缘网络组的.csv,与之关联的人以及人员和群组的一些属性

e.g。

  

团体人物游戏团体游戏<简爱斯诺克斯诺克网球体B约翰·多伊足球足球比赛   史密斯网球网球B弗朗西斯安德伍德足球足球   弗朗西斯安德伍德足球网球

我画了一个二分网络:

df <- read.csv("file.csv", header = TRUE, sep = ",")
df.network <- graph.data.frame(df, directed = F)
V(df.network)$type <- bipartite.mapping(df.network)$type

目前我对Group和Person顶点的着色方式如下:

V(df.network)$color <- ifelse(V(df.network)$type, "grey", "orange")

我真正想要做的是,根据“人物游戏”字段,人物顶点颜色不同,但这似乎不是我可以访问Vertex的属性,只有Edge。所以这可以使边缘着色:

E(df.network)$color <- ifelse(E(df.network)$PersonGame=='Snooker', 
 "red", ifelse(E(df.network)$PersonGame=='Football', "blue", "orange"))

但如果我应用于顶点而不是边缘则不起作用,因为我无法将PersonGame属性应用于顶点。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我建议将游戏转移到节点。 由于某些节点是组,而其他节点是人, 我将其称为游戏(而不是PersonGame 和GroupGame),但我会转移PersonGames 致团体的人员和集团游戏。

PA = unique(cbind(ends(df.network, E(df.network))[,2], E(df.network)$PersonGame))
GA = unique(cbind(ends(df.network, E(df.network))[,1], E(df.network)$GroupGame))

V(df.network)$Game = ""
V(df.network)[PA[,1]]$Game = PA[,2]
V(df.network)[GA[,1]]$Game = GA[,2]

现在,每个节点都有一个游戏。我们可以修改你的陈述 创建边缘颜色以创建顶点颜色。我添加了一行 以不同方式为群组着色

V(df.network)$color <- ifelse(V(df.network)$Game=='Snooker', 
 "red", ifelse(V(df.network)$Game=='Football', "blue", "orange"))
V(df.network)[!V(df.network)$type]$color = "lightgray"

现在我们可以使用节点颜色进行绘图。

LO = layout_as_bipartite(df.network)
plot(df.network, layout=LO)

Network with colored nodes