所以,我们开始。我有几个节点的网络。每个节点可能属于不同的组(请参阅下面的想法)。
这是一个带有边缘列表的玩具示例:
"from","to"
"RB1","CDK2"
"CDK2","CDKN1B"
"RB1","CDK4"
"PDPK1","RPS6KB1"
"PDPK1","PKN2"
"CDKN1B","CDK4"
"PKN2","CDK4"
和只有一组的节点表( 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,并且在网络中将被着色(或点亮),而不属于该节点的节点设置设置为0(并且将为OFF)。
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
或者,我可以使用 stat 列创建与上面相同的数据框,其中包含 sets 的列表,但我真的不知道它是如何工作的>
关于如何对属于不同集的节点进行颜色编码的想法?我如何处理此选项visOptions(selectedBy= "stat")
?
编辑:
我知道visOption对于selectedBy
有几种可能性。我正在尝试弄清楚它如何满足我的需求!
答案 0 :(得分:1)
请查看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))
这应该重现您想要实现的目标!