gpt4 book ai didi

python - 使用 grid_2d_graph 在 networkx 中绘制 MxM 节点的正方形网格时移除旋转效果

转载 作者:太空狗 更新时间:2023-10-30 01:58:06 25 4
gpt4 key购买 nike

我需要生成一个具有 100x100 节点的规则图(也称为点阵网络)。我开始使用以下代码绘制 10x10 图形:

import numpy
from numpy import *
import networkx as nx
from networkx import *
import matplotlib.pyplot as plt

G=nx.grid_2d_graph(10,10)
nx.draw(G)

plt.axis('off')
plt.show()

但我得到的是:

enter image description here

有什么方法可以消除输出的这种旋转效果吗?我的最终网络必须看起来像一个国际象棋 table ,就像这样(请忽略标签):

enter image description here

此外,我需要为每个节点提供其 ID,范围从 0 到 9999(在 100x100 网络的情况下)。任何想法将不胜感激!

最佳答案

默认情况下,networkx.draw使用 Spring 布局。相反,您可以使用参数 pos 提供您自己的位置。这实际上非常简单,因为给定的节点标签 networkx.grid_2d_graph 实际上是一个(行,列)元组:

>>> G=nx.grid_2d_graph(2,2)
[(0, 1), (1, 0), (0, 0), (1, 1)]

因此您可以使用节点的名称作为其位置。所以你只需要创建一个字典映射节点到自己,并将其作为位置传递。

pos = dict( (n, n) for n in G.nodes() )

但是,由于您还想添加节点标签,因此您应该使用 networkx.draw_networkx ,它将自定义标签的字典作为可选参数。您需要将节点映射到新标签的字典。由于 NetworkX 默认为每个节点提供标签(行,列),我们可以只用行 * 10 + 列标记每个节点:

labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )

把它们放在一起,你会得到下面的代码,它产生了下面的图表:

import networkx as nx
import matplotlib.pyplot as plt

N = 10
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )
nx.draw_networkx(G, pos=pos, labels=labels)

plt.axis('off')
plt.show()

plot

编辑

使用@AbdallahSobehy 的建议,我们可以从左到右、从上到下标记节点。

labels = dict( ((i, j), i + (N-1-j) * 10 ) for i, j in G.nodes() )

better-labeled-plot

关于python - 使用 grid_2d_graph 在 networkx 中绘制 MxM 节点的正方形网格时移除旋转效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33168699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com