【问题标题】:Vertex attributes in bipartite network igraph二分网络igraph中的顶点属性
【发布时间】:2018-08-31 16:25:39
【问题描述】:

首先,我对 R 很陌生,如果这是一个简单的问题,我深表歉意。

我有一个 .csv 文件,其中包含一组边缘网络、与他们相关的人员以及人员和组的一些属性

例如

Group Person PersonGame GroupGame
A Jane Doe 斯诺克网球
B John Doe Football Football
A Bill 史密斯网球 网球
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")

我真正想做的是根据“Person Game”字段对 Person 顶点进行不同的着色,但这似乎不是我可以为 Vertex 访问的属性,只能访问 Edge。所以这可以为边缘着色:

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

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

有人可以帮忙吗?

【问题讨论】:

    标签: r attributes igraph bipartite


    【解决方案1】:

    我建议将游戏转移到节点。 由于一些节点是组,而另一些是人, 我只会称它为 Game(而不是 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多