如何从igraph使用Cytoscape

问题描述 投票:1回答:1

我们如何使用Cytoscape反映Fruchterman-Reingold布局?我无法使用Cytoscape从igraph复制Fruchterman-Reingold布局图。

 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')
r cytoscape.js cytoscape
1个回答
0
投票

我不确定这是否是您问题的正确答案,但我认为您无需在gravity multiplier命令中指定layoutNetwork。我没有详细检查Fruchterman-reingold算法,但是据我所知,您想在igraphCytoscape之间应用相同的算法。

为此,我首先看一下默认情况下传递给函数layout.fruchterman.reingold的参数,该参数基本上是调用函数layout_with_fr(在R控制台中写layout_with_fr以查看函数参数)。

检查此功能的代码,您可以看到,根据编写方式,仅设置了两个参数。第一个是迭代次数(默认设置为500),第二个是温度开始(start.temp等效于图形的vcount的平方根)。因此,这里start.temp = sqrt(5)

然后,您可以使用以下方法在Cytoscape中检查Fruchterman-reingold算法的属性:

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"   

所以,我认为根据您的示例,我们应该仅使用nIterationstemperature参数:

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以进行补偿,并使您的网络更具吸引力。

希望它将帮助您找出问题的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.