本插图将展示如何在一个iGraph网络上执行基本的网络操作,并使用这些信息直接从R中使用RCy3包自定义它在Cytoscape中的外观

*来自Vessy的“Fun with R blog”:http://www.vesnam.com/Rblog/viznets5/

1安装

如果(!"RCy3" %in% installed.packages()){install.packages("BiocManager") BiocManager::install("RCy3")} library(RCy3) if(!"igraph" %in% installed.packages()){install.packages("igraph")} library(igraph) if(!"plyr" %in% installed.packages()){install.packages("plyr")} library(plyr)

2所需的软件

RCy3的全部意义在于与Cytoscape连接。您需要安装并启动Cytoscape:

cytoscapePing ()

3.读取数据集。

数据格式:3个变量的数据框架;变量1和变量2对应交互;变量3是交互的权重

lesmis <- system.file("extdata"," lessis .txt", package="RCy3")数据集<-读取。table(lesmis, header = FALSE, sep = "\t")

创建图形。使用simplify来确保没有重复的边或self循环

gD <- igraph::simplify(igraph::graph.data.frame(dataSet, directed=FALSE))

验证节点(77)和边(254)的数量:

igraph: vcount (gD) igraph: ecount (gD)

4常用的iGraph函数

计算用于演示不同绘图能力的一些节点属性和节点相似性

计算所有节点的度

degAll <- igraph::degree(gD, v = igraph:: v (gD), mode = "all")

计算所有节点的中间值

betAll <- igraph:: betweness (gD, v = igraph::v (gD), directed = FALSE) / ((igraph::vcount(gD) - 1) * (igraph::vcount(gD)-2) / 2) betAll。norm <- (betAll - min(betAll))/(max(betAll) - min(betAll)) rm(betAll)

计算所有节点对之间的骰子相似度

dsAll <- igraph::相似度。骰子(gD, vids = igraph::V(gD), mode = "all")

5向网络添加属性

根据计算出的节点属性/相似性添加新的节点属性

gD <- igraph::set.vertex。attribute(gD, "degree", index = igraph::V(gD), value = degAll) gD <- igraph::set.vertex。属性(gD, " betweness ", index = igraph::V(gD), value = betAll.norm)

检查属性。除了“name”,你现在应该能看到“degree”和“betweeness”了。

总结(gD)

现在是edge属性。

F1 <- function(x) {data.frame(V4 = dsAll[which(igraph::V(gD)$name == as.character(x$V1)), which(igraph::V(gD)$name == as.character(x$V2))])}数据集。ext <- plyr::ddply(dataSet, .variables=c("V1", "V2", "V3"), function(x) data.frame(F1(x))) gD <- igraph::set.edge。attribute(gD, "weight", index = igraph::E(gD), value = 0) gD <- igraph::set.edge。属性(gD, "similarity", index = igraph::E(gD), value = 0)

注:dataSet中交互的顺序。ext与它在dataSet或边缘列表中的不一样,因此这些值不能直接赋值

for (i in 1:nrow(dataSet.ext)) {igraph::E(gD)[as.character(dataSet.ext$V1) %——% as.character(dataSet.ext$V2)]$weight <- as.numeric(dataSet.ext$V3) igraph::E(gD)[as.character(dataSet.ext$V1) %——% as.character(dataSet.ext$V2)]$similarity <- as.numeric(dataSet.ext$V4)} rm(dataSet,dsAll, i, F1)

检查边缘属性。你会看到“权重”和“相似度”被加了进去。

总结(gD)

6让我们在Cytoscape中查看它

更新:您可以直接从图例到Cytoscape,发送所有属性并显示图形!

createNetworkFromIgraph (gD,新。title =“悲惨世界”)

6.1让我们决定一个布局

可用的布局列表可以从R访问如下:

getLayoutNames ()

我们将选择“fruchterman-rheingold”布局。要查看给定布局的属性,请使用:

getLayoutPropertyNames(“fruchterman-rheingold”)

我们可以选择任何我们想要的属性,并将它们作为空格分隔的字符串提供:

layoutNetwork('fruchterman-rheingold gravity_multiplier=1 nIterations=10')

但这是一个疯狂的布局,所以让我们尝试“力导向”:

layoutNetwork('force-directed defaultSpringLength=70 defaultSpringCoefficient=0.000003')

6.2接下来,我们可以可视化我们的数据

节点…

setNodeColorMapping('degree', c(min(degAll), mean(degAll), max(degAll)), c('#F5EDDD', '#F59777', '#F55333') lockNodeDimensions(TRUE) setNodeSizeMapping(' betweness ', c(min(betAll.norm), mean(betAll.norm), max(betAll.norm)), c(30,60,100))

边缘…

setEdgeLineWidthMapping('weight', c(min(as.numeric(dataSet.ext$V3)), mean(as.numeric(dataSet.ext$V3)), max(as.numeric(dataSet.ext$V3))), c(1,3,5)) setEdgeColorMapping('weight', c(min(as.numeric(dataSet.ext$V3)), mean(as.numeric(dataSet.ext$V3)), max(as.numeric(dataSet.ext$V3))), c('#BBEE00', '#77AA00', '#558800')))

在定义了节点和边缘规则之后,我们将定义自己的默认颜色/大小模式,因为在使用规则时可能会出现问题

setBackgroundColorDefault('#D3D3D3') setNodeBorderColorDefault('#000000') setNodeBorderWidthDefault(3) setNodeShapeDefault('椭圆')setNodeFontSizeDefault(20) setNodeLabelColorDefault('#000000')

瞧!全部完成。

7为您的记录跟踪版本

cytoscapeVersionInfo ()
sessionInfo ()