как использовать Cytoscape из igraph - PullRequest
2 голосов
/ 22 февраля 2020

Как мы можем отразить макет Фрухтермана-Рейнгольда, используя Cytoscape? Я не могу воспроизвести фигуру Фрухтермана-Рейнгольда из igraph с помощью Cytoscape.

 library(RCy3)
 library(igraph)
 library(ggraph)
 library(tidygraph)
 library(RColorBrewer)

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                        "Esmeralda"),
                 age=c(48,33,45,34,21),
                 gender=c("F","M","F","M","F"))
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
                           "David", "Esmeralda"),
                    to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
                    same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
                    weight=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))
 ig <- graph_from_data_frame(relations, directed=F, vertices=actors)

coul  <- brewer.pal(2, "Set1") 
my_color <- coul[as.numeric(as.factor(V(ig)$gender))]
coords <- layout.fruchterman.reingold(ig)
plot(ig,layout=coords, vertex.color=my_color)


cytoscapePing()


createNetworkFromIgraph(ig,"myIgraph")
layoutNetwork('fruchterman-rheingold gravity_multiplier=1 nIterations=100')

1 Ответ

0 голосов
/ 23 февраля 2020

Я не уверен, что это правильный ответ на ваш вопрос, но я не думаю, что вам нужно указывать gravity multiplier в вашей команде layoutNetwork. Я не проверял подробно алгоритм Fruchterman-reingold, но, как я понимаю ваш вопрос, вы хотите применить тот же алгоритм между igraph и Cytoscape.

Для этого я сначала взгляну на параметры, передаваемые по умолчанию в функцию layout.fruchterman.reingold, которая в основном вызывает функцию layout_with_fr (написал layout_with_fr в консоли R для просмотра параметров функции).

Проверяя код этой функции, вы можете видеть, что в зависимости от того, как вы ее пишете, задаются только два параметра. Первая - это число итераций (по умолчанию установлено 500), а вторая - начальная температура (start.temp равно значению vcount вашего графика). Итак, здесь start.temp = sqrt(5).

Затем вы можете проверить атрибуты алгоритма Fruchterman-reingold в Cytoscape, используя:

getLayoutPropertyNames("fruchterman-rheingold")

[1] "Available arguments for 'layout fruchterman-rheingold':"
 [1] "attraction_multiplier" "conflict_avoidance"    "defaultEdgeWeight"    
 [4] "edgeAttribute"         "gravity_multiplier"    "layout3D"             
 [7] "max_distance_factor"   "maxWeightCutoff"       "minWeightCutoff"      
[10] "network"               "nIterations"           "nodeAttribute"        
[13] "nodeList"              "randomize"             "repulsion_multiplier" 
[16] "singlePartition"       "spread_factor"         "temperature"          
[19] "type"                  "update_iterations"   

Итак, я думаю, исходя из вашего примера, мы должны использовать только nIterations и temperature аргументы:

createNetworkFromIgraph(ig,"myIgraph")
setNodeShapeDefault("ELLIPSE")
setNodeSizeDefault(30)
setNodeColorMapping("gender", c("F","M"), c( "#E41A1C", "#377EB8"), mapping.type = "d")
setLayoutProperties("fruchterman-rheingold", 
                    list(nIterations=500,
                         temperature = sqrt(5)))
layoutNetwork("fruchterman-rheingold")

И вы получите такое представление: enter image description here

Опытным путем я обнаружил, что если вы используете gravity_multiplier=1, вам нужно также передайте аргумент repulsion_multiplier = 1, чтобы компенсировать и сделать вашу сеть более привлекательной.

Надеюсь, это поможет вам найти решение вашего вопроса.

...