标签: igraph

在有向树(igraph)中从一个节点到另一个节点的所有可能路径

我使用python绑定igraph来表示有向树.我想找到从该图中的一个节点到另一个节点的所有可能路径.不幸的是,我无法在执行此任务的igraph中找到准备使用的功能?

编辑

对无限数量路径的关注

我所说的图实际上是一个带有单根的有向无环图(DAG).它代表了一个单向的级联事件,在级联的各个级别上,可以分裂或连接在一起.正如我所说,这是一个单向图.还规定图表不包含任何循环.由于这两个原因,无限的路径列表是不可能的.

我想做什么?

我的目标是找到从图形顶部(根)到给定节点的所有可能路径.

python algorithm igraph directed-acyclic-graphs

11
推荐指数
1
解决办法
1万
查看次数

如何在igraph中分离边缘标签和边缘?

我想移动边缘标签的位置,使其不在它的顶部.这是一个小例子:

 g <- graph.empty(n=3) 
 g <- graph(c(1,2,3,2,1,3), directed=T)
 E(g)$weight <- c(3,2,5) 
 plot(g, edge.label = E(g)$weight)
Run Code Online (Sandbox Code Playgroud)

在我的例子中,标签位于边缘,我希望它们垂直于边缘移动一点点.

label r graph-theory igraph

11
推荐指数
1
解决办法
3064
查看次数

增加igraph节点之间的距离

我有一个使用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, col=col, pch=16, title="K means clustered subgroups")
dev.off()
Run Code Online (Sandbox Code Playgroud)

如果我不重新缩放,中央高度连接的节点聚集在一起,我得到一个这样的图形,其中图形体内的模式无法辨别: 在此输入图像描述

另一方面,如果我告诉plot命令不要重新缩放,那么我得到这个: 在此输入图像描述

图案可辨别的地方,但图表的一半不在图中.这不是绘图大小的问题,就好像我增加了png的尺寸一样,它仍然将图形置于绘图边缘的中心.

这不是布局的问题 - 我尝试过fruchterman.reingold,layout_nicely,reingold.tilford,layout.circle,布局随机,同样的事情发生了.

显然曾经有一个变量来设置节点之间的排斥因子,但这似乎已被弃用.

如何将图表的节点展开或重新缩放并重新定位图?

r igraph

11
推荐指数
2
解决办法
2万
查看次数

获取n个节点之间最短路径的子图

我有一个未加权的图形,我想得到一个子图,它只包含节点和边,包含n个已知节点之间的最短路径.在这种情况下,3个节点(11,29和13是名称).

如何获得R中n个节点之间最短路径的子图?

MWE

library(ggraph)
library(igraph)

hs <- highschool[highschool$year == '1958',]
set.seed(11)
graph <- graph_from_data_frame(hs[sample.int(nrow(hs), 60),])


# plot using ggraph
ggraph(graph, layout = 'kk') + 
    geom_edge_fan() + 
    geom_node_text(aes(label = name)) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

期望的输出

所需的输出将是以下绿色子图(或者关闭,我正在观察上面的图形并在视觉上挑选出子图的内容)忽略/移除其他节点和边缘.

在此输入图像描述

algorithm r igraph ggraph

11
推荐指数
1
解决办法
1372
查看次数

使用igraph,如何在箭头指向相反方向时强制弯曲

autocurve.edges在igraph图中弯曲边缘做了一个了不起的工作,这样当它们指向同一方向时它们不会重叠.但是,当它们指向相反的方向时,不会施加曲率.

d <- data.frame(start=c("a","a","b","c"),end=c("b","b","c","b"))


graph <- graph.data.frame(d, directed=T)

plot(graph,
     vertex.color="white")
Run Code Online (Sandbox Code Playgroud)

igraph与叠加的箭头指向相反的方向

问题是b和c(或c和b)之间的箭头.

除了手动指定曲率,任何建议?

plot r igraph

10
推荐指数
1
解决办法
3725
查看次数

如何使用igraph将两个节点合并为一个节点

我试图将图形(G)中的两个节点(称为"V"和"U")合并为单个节点(V).

G是779个节点(网站)的超链接网络.每条边代表一个超链接.V和U实际上是同一个网站,但不幸的是,该网站的网页已分成两个独立的节点.所以我想把它们放回一个节点.

我已经研究了contract.vertices函数,但我无法理解如何在这里进行调整.

以下是我的图表(G)的属性.

> G
IGRAPH D--- 779 3544 -- 
+ attr: Image File (v/c), Ringset (v/n), Country Code TLD (v/n), Generic TLD (v/n), Number of Pages (v/n), Categorical 1 (v/n), Categorical 2 (v/n),
  Categorical 3 (v/n), id (v/c), label (v/c), Width (e/n)
Run Code Online (Sandbox Code Playgroud)

我有两个节点要合并在一起:

> V(g)$id[8]
[1] "http://www.police.uk/"
Run Code Online (Sandbox Code Playgroud)

> V(g)$id[14]
[1] "http://police.uk/"
Run Code Online (Sandbox Code Playgroud)

总共有779个节点和3544个边缘.

我希望这两个节点成为图中的单个节点(即它们将具有相同的"id").来自/到其他节点的所有链接和外链现在将仅指向这个新的单个节点.

除了Number of Pages(它的值将是合并之前的两个节点的总和)之外,所有其他属性将保持不变.

r igraph

10
推荐指数
1
解决办法
3358
查看次数

在R中改变iGraph中顶点之间的间距

假设我想用以下数据制作一个图:

pairs <- c(1, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 4, 
           14, 4, 15, 6, 13, 6, 19, 6, 28, 6, 36, 7, 16, 7, 23, 7, 26, 7, 33,
           7, 39, 7, 43, 8, 35, 8, 40, 9, 21, 9, 22, 9, 25, 9, 27, 9, 33, 9,
           38, 10, 12, 10, 18, 10, 20, 10, 32, 10, 34, 10, 37, 10, 44, 10, 45,
           10, …
Run Code Online (Sandbox Code Playgroud)

plot r igraph

10
推荐指数
1
解决办法
5696
查看次数

正确绘制R中的大邻接矩阵

我有一个相当大(但相当稀疏)的邻接矩阵(500x500),我试图在视觉上代表.在我看来,类似于力导向图的东西是我最好的选择,在尝试找出实现它的最佳方法时,我遇到了R的多个资源.最有帮助的是http:/上的网络可视化/kateto.net/network-visualization虽然我之前从未使用过R,但它似乎有很多有用的功能可用于这种可视化.

我已设法在下面生成一个图,但图像相当小,节点堆叠.

在此输入图像描述

如果我打印到pdf而不是PNG,分辨率会略好一些,但我仍然存在堆叠问题.因此,我的问题是,如何在R中正确绘制一个大的邻接矩阵来解决这些问题.

到目前为止我的代码如下(最后几行我尝试绘制数据的几种不同方式).任何提示都非常感谢.先感谢您.

为方便起见,我在https://github.com/BStricklin/DataViz上传了我的GitHub引用的两个文件.

plot.new()
library('igraph')
setwd("D:/Downloads/polnet2016/Data files")

nodes2 <- read.csv("nodes.csv", header=T, as.is=T)
links2 <- read.csv("nodeAdjacency.csv", header=T, row.names=1)

links2 <- as.matrix(links2)

head(nodes2)
head(links2)

net2 <- graph_from_incidence_matrix(links2)
net2 <- graph_from_adjacency_matrix(links2, mode = "undirected", weighted = TRUE)
net2 <- simplify(net2, remove.multiple = F, remove.loops = T) 

V(net2)$label <- nodes2$id

deg <- degree(net2, mode="all")
V(net2)$size <- deg*3

#plot(net2)
#plot(net2, edge.label=round(E(net2)$weight, 3))
layout <- layout.reingold.tilford(net2)
#plot.igraph(net2,vertex.size=3,layout=layout.lgl)
plot.igraph(net2,vertex.size=3,vertex.label.cex=.5,layout=layout.fruchterman.reingold(net2, niter=10000))
Run Code Online (Sandbox Code Playgroud)

编辑:对于任何想知道我最终如何做到这一点的人,我不得不使用MATLAB并利用图形和绘图功能.它看起来像R图像一样令人讨厌,但是通过一些节点的自定义和缩放功能的使用,它运行得很好.我仍然会对如何在R中这样做感兴趣.

r adjacency-list-model igraph adjacency-matrix

10
推荐指数
1
解决办法
2220
查看次数

带有R的igraph/visNetwork:如何禁用前向链接?

以下代码生成一个很好的网络图:

library(igraph);library(visNetwork);library(dplyr)

set.seed(123)
nnodes <- 10
nnedges <- 20

nodes <- data.frame(id = 1:nnodes)
edges <- data.frame(from = sample(1:nnodes, nnedges, replace = T),
                    to = sample(1:nnodes, nnedges, replace = T))

visNetwork(nodes, edges) %>%
  visIgraphLayout(layout = "layout_in_circle") %>%
  visNodes(shape="circle") %>% 
  visOptions(highlightNearest = list(enabled = T, hover = T), nodesIdSelection = T)
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何禁用从相邻节点离开的边缘(例如,当选择节点8时,我不希望显示从3到9的边缘).

编辑:添加了库,thx for poining that out

在此输入图像描述 在此输入图像描述

r igraph visnetwork

10
推荐指数
1
解决办法
242
查看次数

python中的图形图上有很多边缘

我有以下脚本:

import pandas as pd
from igraph import *

df_p_c = pd.read_csv('data/edges.csv')

...

edges = list_edges
vertices = list(dict_case_to_number.keys())

g = Graph(edges=edges, directed=True)

plot(g, bbox=(6000, 6000))
Run Code Online (Sandbox Code Playgroud)

我有2300个边缘与稀有连接.这是我的情节: 所有地区 以下是它的一些部分的缩放:

在此输入图像描述 在此输入图像描述

此图不可读,因为边之间的距离太小.如何在边缘之间留出更大的距离?只有来自同一"家庭"的边缘距离很小.

有没有其他方法来改善有很多边缘的情节?我正在寻找任何可视化父子关系的方法,它可能是另一个python包.

python visualization matplotlib igraph python-3.x

10
推荐指数
1
解决办法
706
查看次数