我们如何使用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')
我不确定这是否是您问题的正确答案,但我认为您无需在gravity multiplier
命令中指定layoutNetwork
。我没有详细检查Fruchterman-reingold
算法,但是据我所知,您想在igraph
和Cytoscape
之间应用相同的算法。
为此,我首先看一下默认情况下传递给函数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"
所以,我认为根据您的示例,我们应该仅使用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")
[根据经验,我发现如果您使用的是gravity_multiplier=1
,则还需要传递参数repulsion_multiplier = 1
以进行补偿,并使您的网络更具吸引力。
希望它将帮助您找出问题的解决方案。