二分网络 igraph 中的顶点属性
Vertex attributes in bipartite network igraph
首先,我是 R 的新手,如果这是一个简单的问题,我深表歉意。
我有一个 .csv,其中包含组的边缘网络、与他们关联的人员以及人员和组的一些属性
例如
Group Person PersonGame GroupGame
A Jane Doe Snooker Tennis
B John Doe Football Football
A Bill
Smith Tennis Tennis
B Francis Underwood Football Football
A Francis Underwood Football Tennis
我画了一个二分网络:
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")
虽然我真正想做的是根据 "Person Game" 字段为 Person 顶点着色不同,但这似乎不是我可以访问顶点的属性,只能访问边。所以这可以为边缘着色:
E(df.network)$color <- ifelse(E(df.network)$PersonGame=='Snooker',
"red", ifelse(E(df.network)$PersonGame=='Football', "blue", "orange"))
但是如果我应用到顶点而不是边则它不起作用,因为我无法将 PersonGame 属性应用到顶点。
有人能帮忙吗?
我建议将游戏转移到节点。
由于一些节点是组而其他节点是人,
我将把它称为游戏(而不是 PersonGame
和 GroupGame),但我将转移 PersonGames
到人和 GroupGames 到组。
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)
首先,我是 R 的新手,如果这是一个简单的问题,我深表歉意。
我有一个 .csv,其中包含组的边缘网络、与他们关联的人员以及人员和组的一些属性
例如
Group Person PersonGame GroupGame
A Jane Doe Snooker Tennis
B John Doe Football Football
A Bill Smith Tennis Tennis
B Francis Underwood Football Football
A Francis Underwood Football Tennis
我画了一个二分网络:
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")
虽然我真正想做的是根据 "Person Game" 字段为 Person 顶点着色不同,但这似乎不是我可以访问顶点的属性,只能访问边。所以这可以为边缘着色:
E(df.network)$color <- ifelse(E(df.network)$PersonGame=='Snooker',
"red", ifelse(E(df.network)$PersonGame=='Football', "blue", "orange"))
但是如果我应用到顶点而不是边则它不起作用,因为我无法将 PersonGame 属性应用到顶点。
有人能帮忙吗?
我建议将游戏转移到节点。 由于一些节点是组而其他节点是人, 我将把它称为游戏(而不是 PersonGame 和 GroupGame),但我将转移 PersonGames 到人和 GroupGames 到组。
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)