Python 使用networkx的链接矩阵绘制有向图

Python 使用networkx的链接矩阵绘制有向图,python,matrix,graph,networkx,pagerank,Python,Matrix,Graph,Networkx,Pagerank,我正在为一个学校项目做pagerank,我有一个矩阵,其中我的行表示从站点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,

我正在为一个学校项目做pagerank,我有一个矩阵,其中我的行表示从站点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的节点具有指向2、3、4、5和7的定向边。这对应于数组中第一行Z[0]上的值:


因为第一行对应于节点1,而此行中的那些出现在对应于节点2、3、4、5和7的列中。

代码生成的绘图在我看来是正确的。你想要什么样的结果?我想问题是图表上的标签没有正确放置,或者可能是因为图表没有定向。。。。但是标签不是根据矩阵放置的,我想你能编辑你的代码,这样我就可以直接复制和粘贴它,这样我肯定我运行的是和你一样的东西吗?哦,谢谢,我看到了问题,我应该转置矩阵,因为数组中的第一行应该是指向1的链接,而不是来自1的链接。
[0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0]