Как динамически раскрасить узел в соответствии с группами, к которым он принадлежит? - PullRequest
1 голос
/ 17 октября 2019

Итак, поехали. У меня есть сеть с несколькими узлами. Каждый узел может принадлежать к разным группам (см. Мою идею ниже).

Это игрушечный пример со списком ребер:

"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")

Проблема в следующем: что, если узел может принадлежать нескольким статистикам ? Здесь я вижу два основных варианта:

Я могу создать тот же фрейм данных, что и выше, но с несколькими столбцами stat и цветовым кодированием узлов в соответствии с выбранным столбцом. Я думал о столбце [0-1], в котором узлы, принадлежащие этому множеству , помечены 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

ИЛИ, я могу создать тот же фрейм данных, что и выше, со столбцами stat содержащий список наборов , но я не понимаю, как это может работать

Идеи о том, как цветовое кодирование узлов, принадлежащих к различным наборам ? Как мне справиться с этой опцией visOptions(selectedBy= "stat")?

РЕДАКТИРОВАТЬ:

Я знаю, что visOption имеет несколько возможностей для selectedBy. Я пытаюсь понять, как это относится к моим потребностям!

1 Ответ

1 голос
/ 17 октября 2019

Пожалуйста, посмотрите на 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))

Это должно воспроизвести то, чего вы хотите достичь!

...