我需要生成一个有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()
但我得到的是:
有没有办法消除这种输出的旋转效应?我的最终网络必须看起来像一张象棋桌,就像这样(请忽略标签):
另外,我需要给每个节点一个ID,范围从0到9999(对于100x100网络)。任何想法都将不胜感激!在
默认情况下,^{} 使用spring布局。相反,您可以使用参数
pos
提供自己的位置。这实际上很简单,因为给定networkx.grid_2d_graph
的节点标签实际上是一个(行,列)元组:因此,可以使用节点的名称作为其位置。所以您只需要创建一个字典映射节点到它们自己,并将其作为位置传递。在
^{pr2}$但是,由于您还想添加节点标签,所以应该使用^{} ,它将自定义标签的字典作为可选参数。您需要一个字典将节点映射到它们的新标签。由于NetworkX在默认情况下为每个节点提供了标签(行、列),所以我们只需用row*10+column标记每个节点:
将其组合在一起,您将得到以下代码,该代码将生成以下图表:
编辑
根据@abdallahsobey的建议,我们可以从左到右和从上到下标记节点。在
支持@mdml答案的澄清(这里所说的所有内容都将参考@mdml的答案)
1-节点关键点使用nx.grid_2d_图形
给节点的键隐式地给每个节点一个(i,j)键来描述行和列。访问(0,0)->;G[(0,0)]
2-用于绘图的标签
为图纸指定的标签应按以下方式进行,以遵守问题中的编号方案:
请注意,它应该是N而不是10,这样就更一般了,好像你改变了N标签将不是你期望的那样。此外,这些标签仅用于绘图,因此它们与访问节点无关。在
3-链接键到标签
访问节点->;G[(0,0)]指的是所绘制图形中的节点90(通常是左下角),G[(1,0)]是右侧的节点(91),而G[(0,1)]是标记为(80)的节点,因此请注意此约定,因为它可能不太明显。在
4-给出与图上的节点ID相等的节点ID
您可以使用标签字典向每个节点添加一个名为id的属性,该节点包含您在绘制的图形中看到的整数:
^{pr2}$我创建了一个N=2的简单图形,并使用点2和3处的线条,然后打印出Id,如下所示:
结果:
相关问题 更多 >
编程相关推荐