天道酬勤,学无止境

igraph

根据权重可视化节点之间的距离 - 使用 R(Visualizing distance between nodes according to weights - with R)

问题 我正在尝试绘制一个图形,其中顶点之间的距离对应于边权重*,并且我发现在 graphviz 中有一种绘制此类图形的方法。 有没有办法在 R 中使用 igraph 包(特别是使用 graph.adkacency)来做到这一点? 谢谢, 诺姆 (曾经有人问过:绘制一个图形,其中顶点之间的距离对应于边权重) 回答1 这是不可能的,因为您需要每个三角形的三角形相等才能绘制这样的对象。 所以你只能近似它。 为此,您可以使用“强制嵌入”算法。 igraph中有几个。 我经常使用的是 Fruchterman-Reingold 算法。 详情请参阅: library("igraph") ?layout.fruchterman.reingold 编辑: 请注意,节点之间的距离将与绝对边权重的倒数有些对应。 回答2 就像 Sacha Epskamp 提到的那样,除非您的数据是完美的,否则您无法绘制不违反某些三角不等式的图形。 然而,有一些名为多维缩放 (MDS) 的技术旨在最小化此类违规。 R 中的一种实现是来自stats包的cmdscale 。 我推荐?cmdscale底部的?cmdscale : > require(graphics) > > loc <- cmdscale(eurodist) > x <- loc[,1] > y <- -loc[,2] > plot(x, y, type="n

2021-12-08 15:39:35    分类:技术分享    r   distance   igraph

从 get.shortest.paths() 查找路线的距离(Find distance of route from get.shortest.paths())

问题 我在 R 中使用igraph包来做一些相当简单的事情:计算网络中两个节点之间的最短距离。 有没有一种直接的方法来提取通过get.shortest.paths()计算的路径的距离? 下面是一些可重现的代码,它举例说明了我的问题: ## reproducible code: df2 = rbind(c(234,235,21.6), c(234,326,11.0), c(235,241,14.5), c(326,241,8.2), c(241,245,15.3), c(234,245,38.46)) df2 = as.data.frame(df2) names(df2) = c("start_id","end_id","newcost") require(igraph) g2 <- graph.data.frame(df2, directed=FALSE) class(g2) print(g2, e=TRUE, v=TRUE) ## calculate shortest path between vertex 234 and 245 (tmp2 = get.shortest.paths(g2, from='234', to='245',weights=E(g2)$newcost)) ## print route vertices: V(g2)[tmp2[[1]]] ## print

2021-12-08 14:51:08    分类:技术分享    r   routing   dijkstra   igraph

从 get.shortest.paths() 查找与路线距离相关的第二个变量的总数(Find total of second variable related to the distance of route from get.shortest.paths())

问题 我发现以下问题( Find distance of route from get.shortest.paths() )非常有帮助,但想更进一步。 我在数据框中添加了一列,我想获得与最小新成本路径相关的“总距离”。 在我使用的 igraph / R 代码下方。 df2 = rbind(c(234,235,21.6,75), c(234,326,11.0,35), c(235,241,14.5,78), c(326,241,8.2,98), c(241,245,15.3,75), c(234,245,38.46,65)) df2 = as.data.frame(df2) names(df2) = c("start_id","end_id","newcost","distance") df2 require(igraph) g2 <- graph.data.frame(df2, directed=FALSE) tkplot(g2) (tmp2 = get.shortest.paths(g2, from='234', to='245',weights=E(g2)$newcost)) # This gives the shortest path based on $newcost V(g2)[tmp2[[1]]] 我想回答的问题是与这条最短路径相关的距离是多少。 最短路径的答案是 34

2021-12-08 14:28:51    分类:技术分享    r   routing   dijkstra   igraph

导入igraph时如何解决AttributeError?(How to solve AttributeError when importing igraph?)

问题 当我在项目中导入 igraph 包时,出现 AttributeError。 这只发生在项目目录中: [12:34][~]$ python2 Python 2.7.1 (r271:86832, Apr 15 2011, 12:09:10) [GCC 4.5.2 20110127 (prerelease)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import igraph >>> [12:34][~]$ cd projectdir/ [12:34][projectdir]$ python2 Python 2.7.1 (r271:86832, Apr 15 2011, 12:09:10) [GCC 4.5.2 20110127 (prerelease)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import igraph Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/site

2021-12-06 13:59:20    分类:技术分享    python   import   packages   igraph

匹配 igraph 中的顶点和边缘颜色(Match vertex and edge color in igraph)

问题 我有一个大数据集,我想用 igraph 用网络图表示。 我只是不明白如何使颜色正确。 是否可以获得边缘与顶点颜色相同的 igraph 图? 我在下面的示例中,我想根据“已采样”或“未采样”状态为顶点和边缘着色。 另一个问题是所有的边都没有出现在 igraph 上,我不明白为什么 到目前为止我的代码是: d <- data.frame(individual=c(1:10), mother_id = c(0,0,0,0,0,1,3,7,6,7), father_id = c(0,0,0,0,0,4,1,6,7,6) , generation = c(0,0,0,0,0,1,1,2,2,2), status=c("sampled","unsampled","unsampled","sampled",'sampled',"sampled","unsampled","unsampled","sampled",'sampled')) #Just some settings for layout plot g <- d$generation n <- nrow(d) pos <- matrix(data = NA, nrow = n, ncol = 2) pos[, 2] <- max(g) - g pos[, 1] <- order(g, partial = order(d

2021-12-05 19:24:18    分类:技术分享    r   colors   igraph

如何使用R从具有多列的数据框中计算(共)出现矩阵?(How to calculate a (co-)occurrence matrix from a data frame with several columns using R?)

问题 我是 R 的新手,目前正在处理边缘列表形式的协作数据,该列表具有 32 列和大约 200.000 行。 我想根据国家之间的相互作用创建一个(共)现矩阵。 但是,我想通过对象的总数来计算交互次数。 期望结果的基本示例 如果在一行中“England”出现了 3 次而“China”只出现了一次,结果应该是下面的矩阵。 England China England 3 3 China 3 1 可重现的例子 df <- data.frame(ID = c(1,2,3,4), V1 = c("England", "England", "China", "England"), V2 = c("Greece", "England", "Greece", "England"), V32 = c("USA", "China", "Greece", "England")) 因此,示例数据框当前看起来像这样: ID V1 V2 ... V32 1 England Greece USA 2 England England China 3 China Greece Greece 4 England England England . . . 期望的结果 我想按行计算(共)出现并且与顺序无关,以获得一个(共)出现矩阵,该矩阵说明边缘循环(例如英格兰 - 英格兰)的低频,这导致以下结果: China

2021-12-05 08:47:00    分类:技术分享    r   dplyr   igraph   adjacency-matrix   find-occurrences

最小成本流 - R 中的网络优化(Minimum Cost Flow - network optimization in R)

问题 我正在尝试在R实施“最小成本网络流”运输问题解决方案。 我知道这可以使用lpSolve东西从头开始实现。 但是,我看到“最大流量”有一个方便的igraph实现。 这种预先存在的解决方案会方便得多,但我找不到最低成本的等效功能。 是否有计算最小成本网络流解决方案的igraph函数,或者有没有办法将igraph::max_flow函数应用于最小成本问题? igraph网络示例: library(tidyverse) library(igraph) edgelist <- data.frame( from = c(1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8), to = c(2, 3, 4, 5, 6, 4, 5, 6, 7, 8, 7, 8, 7, 8, 9, 9), capacity = c(20, 30, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99), cost = c(0, 0, 1, 2, 3, 4, 3, 2, 3, 2, 3, 4, 5, 6, 0, 0)) g <- graph_from_edgelist(as.matrix(edgelist[,c('from','to')])) E(g)$capacity <- edgelist$capacity E

2021-12-01 12:28:33    分类:技术分享    r   algorithm   optimization   igraph   network-flow

创建具有隔离节点的 igraph(creating igraph with isolated nodes)

问题 我有一个与此类似的问题:使用 igraph 读取具有隔离节点的邻接列表 我想绘制一些没有关系的节点。 但由于某种原因,上面线程中提到的解决方案不起作用 我的数据 data <- data.frame(ID = c(143918,176206,210749,219170,247818,314764,321459,335945,339637,700689,712607,712946,735907,735907,735907,735907,735907,735907,735908,735908,735908,735908,735908,735908,735910,735911,735912,735913,746929,746929,747540,755003,767168,775558,776656,794173,794175,807493), relation = c(111098,210749,176206,NA,NA,NA,NA,NA,NA,807493,NA,NA,735908,735910,735911,735912,735913,767168,735907,735910,735911,735912,735913,767168,NA,NA,NA,NA,NA,100723,NA,NA,NA,776656,775558,NA,NA,700689))

2021-12-01 10:21:06    分类:技术分享    r   igraph

可视化解析树结构(Visualize Parse Tree Structure)

问题 我想将来自openNLP的解析(POS 标记)显示为树状结构可视化。 下面我提供了来自openNLP的解析树,但我无法绘制为 Python 解析常见的可视化树。 install.packages( "http://datacube.wu.ac.at/src/contrib/openNLPmodels.en_1.5-1.tar.gz", repos=NULL, type="source" ) library(NLP) library(openNLP) x <- 'Scroll bar does not work the best either.' s <- as.String(x) ## Annotators sent_token_annotator <- Maxent_Sent_Token_Annotator() word_token_annotator <- Maxent_Word_Token_Annotator() parse_annotator <- Parse_Annotator() a2 <- annotate(s, list(sent_token_annotator, word_token_annotator)) p <- parse_annotator(s, a2) ptext <- sapply(p$features, `[[`, "parse") ptext

2021-11-30 01:14:16    分类:技术分享    r   nlp   visualization   igraph   opennlp

增加 igraph 节点之间的距离(increasing the distance between igraph nodes)

问题 我有一个使用 igraph 生成的图表。 我想分散节点。 到目前为止,我找到的唯一方法是缩放布局并强制绘图命令不重新缩放。 png("kmeansColouredNetwork.png", width=1200,height = 1000) col=c("yellow", "saddlebrown", "brown1","chartreuse2", "chocolate1","darkorange" ,"deepskyblue1", "hotpink1","plum2") for(i in 1:9){ V(graph)$cluster[which(V(graph)$name %in% kmeans[,i])]<-col[i] } V(graph)$color=V(graph)$cluster coords <- layout.fruchterman.reingold(graph)*0.5 plot(graph, layout = coords, vertex.label=NA, rescale=FALSE, vertex.size=degree(graph)*.25,vertex.color=V(graph)$cluster) labels = paste("cluster:", 1:length(colours)) legend("left",legend=labels

2021-11-29 23:49:26    分类:技术分享    r   igraph