r - 如何使用 igraph 中的 Cytoscape
问题描述
我们如何使用 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
and之间应用相同的算法Cytoscape
。
为此,我首先看一下默认传递给函数的参数,该函数layout.fruchterman.reingold
基本上是调用函数layout_with_fr
(在 R 控制台中编写layout_with_fr
以查看函数参数)。
查看这个函数的代码可以看到,根据你的写法,只设置了两个参数。第一个是迭代次数(默认设置为 500),第二个是温度开始(start.temp 等于图表的 vcount 的 sqrt)。所以,在这里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")
根据经验,我发现如果您使用gravity_multiplier=1
,您还需要传递参数repulsion_multiplier = 1
来补偿并使您的网络更具吸引力。
希望它能帮助您找出问题的解决方案。
推荐阅读
- http - 在互联网上,当服务器处于最大容量时,请求会发生什么
- python - Azure Function Python docker 容器:找不到用于此绑定的 Azure 存储连接字符串
- python - Kivy问题中的中心单选按钮
- php - 从 mailer.php 提交的表单进入空白页面。可能重定向到以前的 html 页面?
- java - Eclipse 将库导出到 jar 中
- javascript - 简单的javascript函数不返回值
- powershell - 无法更改控制台颜色
- python - 在当前 python 文件中运行 python 脚本
- android - Xamarin 代码在 Android 上运行良好,但在 iOS 上却不行
- c++ - Boost C++ 库中的深度优先搜索未显示错误