获取绘制的NetworkX图节点的坐标

3
在以下代码中,我正在绘制一个二维邻接矩阵,如下图所示。由于networkx能够绘制节点,因此必须有节点的坐标信息。我想知道是否有方法可以检索出绘制的图形中每个节点的二维坐标。我在谷歌搜索和查看文档时都没有找到任何有用的信息。
import networkx as nx
from networkx.drawing.nx_agraph import to_agraph

dt = [('len', float)]
A = np.array([(0, 5, 5, 5),
           (0.3, 0, 0.9, 0.2),
           (0.4, 0.9, 0, 0.1),
           (1, 2, 3, 0)
           ])*10

A = A.view(dt)
G = nx.from_numpy_matrix(A)

G.draw('distances_1.png', format='png', prog='neato')

enter image description here

2个回答

2
你的代码不能按照原样运行。但我认为你只是想要漂亮的布局位置,你可以通过调用graphviz_layout(使用pygraphviz)来获得它们。结果是一个以节点为键、位置为值的字典。
In [1]: import networkx as nx

In [2]: import numpy as np

In [3]: from networkx.drawing.nx_agraph import graphviz_layout

In [4]: A = np.array([(0, 5, 5, 5),
   ...:            (0.3, 0, 0.9, 0.2),
   ...:            (0.4, 0.9, 0, 0.1),
   ...:            (1, 2, 3, 0)
   ...:            ])*10

In [5]: G = nx.from_numpy_matrix(A)

In [6]: pos = graphviz_layout(G, prog='neato')

In [7]: pos
Out[7]: 
{0: (-42.946, -6.3677),
 1: (42.991, 6.3533),
 2: (6.3457, -42.999),
 3: (-6.3906, 43.014)}

我对图形数据比较新,有一个即将开始的项目需要使用networkx。你推荐哪些阅读材料可以快速入门? - wwnde

0

默认情况下,networkx.draw() 使用 networkx.spring_layout() 计算位置。您可以使用 spring_layout() 或任何其他 布局函数 直接获取坐标。

您可以导出这些坐标或将它们传递回 draw() 以在绘图中使用。

import networkx
import matplotlib.pyplot as plt

G = networkx.petersen_graph()
pos = networkx.spring_layout(G)
networkx.draw(G, pos)
plt.show()

print(pos)
{0: array([-0.91403075,  0.80432224]),
1: array([-0.20318824,  0.06553106]),
...
9: array([1.        , 0.70843343])}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接