如何根据节点所属的组为节点动态着色?

how to dynamically color a node according to the groups it belongs to?

所以,我们开始吧。我有一个包含多个节点的网络。每个节点可能属于不同的组(见下面我的想法)。

这是一个玩具示例,带有边列表:

"from","to"
"RB1","CDK2"
"CDK2","CDKN1B"
"RB1","CDK4"
"PDPK1","RPS6KB1"
"PDPK1","PKN2"
"CDKN1B","CDK4"
"PKN2","CDK4"

和一个节点 table 只有一组(stat 列):

name,stat
RB1,mixed
CDK2,up
CDKN1B,up
CDK4,up
PDPK1,up
RPS6KB1,up
PKN2,down

然后是生成具有属性 stat 的网络的代码,当前用于对节点进行颜色编码,据此 stat 用户选择:

library(tidyverse)
library(igraph)
library(visNetwork)

edgelist  <- read.csv("edges_mod.csv")
nodes <- read.csv("nodes_mod.csv")

g <- graph_from_data_frame(edgelist,directed=F,vertices=nodes)

V(g)$color  <- ifelse(V(g)$stat == "up", "red",ifelse(V(g)$stat == "down","blue","yellow"))

data <- toVisNetworkData(g)


visNetwork(nodes=data$nodes, edges=data$edges, width="100%") %>%
    visEdges(color="black") %>%
    visIgraphLayout(layout="layout_with_kk") %>%
    visOptions(selectedBy= "stat")

这里的问题是:如果一个节点可能属于几个stats怎么办? 我在这里看到两个主要选项:

我可以创建与上面相同的数据框,但具有多个 stat 列,并根据所选列对节点进行颜色编码。我正在考虑 [0-1] 列,其中属于 set 的节点标记为 1 并且将在网络中着色(或打开),而节点不属于那个 set 将被标记为 0(并且将被关闭)。

name,statZero,statOne,statTwo
RB1,1,1,0
CDK2,1,1,0
CDKN1B,1,0,0
CDK4,1,1,0
PDPK1,1,1,1
RPS6KB1,0,0,0
PKN2,1,0,0

或者,我可以使用包含 sets 列表的 stat 列创建与上面相同的数据框,但我没有真正了解它是如何工作的

关于如何对属于不同 的节点进行颜色编码的想法?我该如何处理这个选项 visOptions(selectedBy= "stat")?

编辑:

我知道 visOption 对 selectedBy 有几种可能性。我正在尝试了解它如何满足我的需求!

请查看 visOptions、参数 selectedBy 并设置 multiple=TRUE

所以我在你的节点上添加了另一个属性作为集群

设节点为:

name,stat,cluster
RB1,mixed,alpha
CDK2,up,alpha
CDKN1B,up,alpha
CDK4,up,beta
PDPK1,up,beta
RPS6KB1,up,beta
PKN2,down,alpha

和你定义的边,

然后:

library(tidyverse)
library(igraph)
library(visNetwork)

edgelist  <- read.csv("edge.csv")
nodes <- read.csv("node.csv")

g <- graph_from_data_frame(edgelist,directed=F,vertices=nodes)

V(g)$color  <- ifelse(V(g)$stat == "up", "red",ifelse(V(g)$stat == "down","blue","yellow"))
V(g)$groups <- paste(V(g)$stat, V(g)$cluster, sep=",")

data <- toVisNetworkData(g)


visNetwork(nodes=data$nodes, edges=data$edges, width="100%") %>%
    visEdges(color="black") %>%
    visIgraphLayout(layout="layout_with_kk") %>%
    visOptions(selectedBy= list(variable="groups",multiple=T))

这应该重现您想要实现的目标!