首页 文章

二分网络中的顶点属性

提问于
浏览
1

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

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

例如

团体人物游戏团体游戏简爱斯诺克斯诺克网球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

    我建议将游戏转移到节点 . 由于某些节点是Groups而其他节点是Persons,我将其称为Game(而不是PersonGame和GroupGame),但我会将PersonGames转移到Persons,将GroupGames转移到Groups .

    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

相关问题