python - 使用链接矩阵和 networkx 绘制有向图

标签 python matrix graph networkx pagerank

我正在为一个学校项目进行页面排名,我有一个矩阵,其中行“i”代表从站点 j(行)到站点 i 的链接。 (如果还不清楚,我会解释更多)。

当前部分是:

Z=[[0,1,1,1,1,0,1,0,0,0,0,0,0,0],[1,0,0,0,1,0,0,0,0,0,0,0,0,0],    [1,1,0,0,0,0,0,0,0,0,0,0,0,0],[1,0,1,0,0,0,0,0,0,0,0,0,0,0],[1,0,0,1,0,0,0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,1,0,1,0,0,0,0],[0,0,0,0,0,1,0,0,0,0,0,0,0,0],[0,0,0,0,0,1,1,0,1,0,0,0,0,0],[0,0,0,0,0,1,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,1,0,1,1,1,1],[0,0,0,0,0,0,0,0,0,1,0,0,0,1],[0,0,0,0,0,0,0,0,0,1,1,0,0,0],[0,0,0,0,0,0,0,0,0,1,0,1,0,0],[0,0,0,0,0,0,0,0,0,1,0,0,1,0]]
A=np.matrix(Z)
G=nx.from_numpy_matrix(A,create_using=nx.MultiDiGraph())
pos=nx.circular_layout(G)
labels={}
for i in range (N):
    labels[i]=i+1
nx.draw_circular(G)
nx.draw_networkx_labels(G,pos,labels,font_size=15)

我遇到的问题是标签不在它们应该在的位置,似乎networkx只是顺时针放置它们......

此外,我如何轻松地引导图表,以便从 j 到 i 的链接不会从 i 到 j?

谢谢!

最佳答案

import numpy as np
import matplotlib.pyplot as plt
import networkx as nx

Z = [[0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0],
     [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0]]

G = nx.from_numpy_matrix(np.array(Z), create_using=nx.MultiDiGraph())
pos = nx.circular_layout(G)
nx.draw_circular(G)
labels = {i : i + 1 for i in G.nodes()}
nx.draw_networkx_labels(G, pos, labels, font_size=15)
plt.show()

产量

这个结果对我来说似乎是正确的。例如,请注意,标记为 1 的节点具有指向 23457。这对应于数组中第一行的值,Z[0]:

[0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0]

因为第一行对应于节点1,并且该行中的那些出现在对应于节点234的列中>、57

关于python - 使用链接矩阵和 networkx 绘制有向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28996913/

相关文章:

c - 需要关于如何实现这个的帮助..选择一个最好的数据结构

python - 修复由(某些)转义反斜杠破坏的 unicode 字符串

python - 无法安装python ast

python - 以一对多关系选择和排序记录

python - 嵌套循环、迭代器和 csv

java - 求二维数组java的总和

database-design - Neo4j/Strategy 以保留节点更改的历史记录

algorithm - 检查图 S 是 G 中的最短路径树(算法 + 正确性)

python - 如何从 Python 中的相关矩阵中识别重要项目(无内循环)

javascript - 尝试使用 WebGL (regl) 的正交投影在屏幕空间坐标中绘制形状