gpt4 book ai didi

python - 从带有边标签的邻接矩阵绘制加权图

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:06 25 4
gpt4 key购买 nike

这是加权图的邻接矩阵,元素 ai,j 是从节点 i 到节点 j 的有向边的权重。

A = [
[0, 1, 0, .8, 0],
[0, 0, .4, 0, .3],
[0, 0, 0, 0, 0],
[0, 0, .6, 0, .7],
[0, 0, 0, .2, 0]]

我的主要目标是生成该图的插图。

我可以像这样在 networkx 中生成图表:

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

G = nx.from_numpy_matrix(np.matrix(A), create_using=nx.DiGraph)
nx.draw(G)
plt.show()

但是我看不到重量。我对这张照片也不是很满意,它还没有准备好发布。有没有人有好的方法来做到这一点?

最佳答案

您需要指定要绘制边缘标签。为此,您必须调用 networkx.drawing.nx_pylab.draw_networkx_edge_labels .

它有一个参数 pos,一个以节点为键、位置为值的字典。对节点和标签使用相同的布局很重要,否则它们将不会对齐!

一个简单的方法是让 networkx 处理布局,例如使用 spring_layout

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

A = [
[0, 1, 0, .8, 0],
[0, 0, .4, 0, .3],
[0, 0, 0, 0, 0],
[0, 0, .6, 0, .7],
[0, 0, 0, .2, 0]]

G = nx.from_numpy_matrix(np.matrix(A), create_using=nx.DiGraph)
layout = nx.spring_layout(G)
nx.draw(G, layout)
nx.draw_networkx_edge_labels(G, pos=layout)
plt.show()

例子:

Example visualization with edge labels

请注意,spring_layout 使用非确定性的 Fruchterman-Reingold 力导向算法,因此您的图表几乎肯定会看起来不一样。然而,通常它会产生漂亮的结果,所以这应该不是主要问题。

文档:networkx.drawing.layout.spring_layout ,不幸的是没有提到它是不确定的。

更新:

让标签只是权重(而不是字典):

labels = nx.get_edge_attributes(G, "weight")
nx.draw_networkx_edge_labels(G, pos=layout, edge_labels=labels)

关于python - 从带有边标签的邻接矩阵绘制加权图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56597840/

25 4 0