具有特定位置的networkx add_node

Posted

技术标签:

【中文标题】具有特定位置的networkx add_node【英文标题】:networkx add_node with specific position 【发布时间】:2012-08-02 00:48:51 【问题描述】:

我还是 networkx 的初学者 我想在不同位置添加多种类型的节点,我使用了以下代码

pos = 0: (40, 20), 1: (20, 30), 2: (40, 30), 3: (30, 10) 
X=nx.Graph()
nx.draw_networkx_nodes(X,pos,node_size=3000,nodelist=[0,1,2,3],node_color='r')

但是当我想访问 Graph X 时,如果我输入 X.node 它会返回一个空列表 如果我想添加更多节点,我必须在开始时使用 pos 字典设置它们的位置。

如何使用 add_node() 将节点添加到特定位置 x 和 y 的图形中

【问题讨论】:

【参考方案1】:

您可以使用以下方法设置单个节点位置,然后提取“pos”字典以在绘图时使用。

In [1]: import networkx as nx

In [2]: G=nx.Graph()

In [3]: G.add_node(1,pos=(1,1))

In [4]: G.add_node(2,pos=(2,2))

In [5]: G.add_edge(1,2)

In [6]: pos=nx.get_node_attributes(G,'pos')

In [7]: pos
Out[7]: 1: (1, 1), 2: (2, 2)

In [8]: nx.draw(G,pos)

更新

添加绘图

【讨论】:

【参考方案2】:

我不完全确定您想要完成什么,但我认为您想将节点添加到图表中,将它们绘制在想要的位置,并且仍然能够在图表对象中访问它们。

由于您没有将节点添加到图表中,这将是一个开始:

X.add_nodes_from(pos.keys())

那么你在绘制图形的时候就不用指定节点列表,这样你在添加新节点的时候就不用在两个不同的地方改变代码了。

如果您希望节点的位置作为节点属性,您也可以这样做:

for n, p in pos.iteritems():
    X.nodes[n]['pos'] = p

请注意,这些位置不会用作绘制图形时的位置,必须明确设置。然后,您可以使用以下命令绘制和显示图表:

nx.draw(X, pos)
plt.show()

假设您进行了导入 from matplotlib import pyplot as plt

【讨论】:

并且需要明确的是,在 pos 中指定的位置与传递给 axes.scatter 的 (x,y) 坐标相同,所以它就像向右 x 和向上 y。 非常有帮助的答案,非常感谢!是否有来自networkx的函数来计算两个节点之间的euklidic距离? @fuuman 我可能迟到了,但据我所知,没有直接的函数可以计算两个节点之间的欧几里得距离。作为参考,您可以使用不久前给我的这个答案:***.com/questions/36330642/… pos 应该是一个字典吗?我想使用二维数组作为位置。有可能吗? 我使用的是 Networkx 2.5,是的,有可能。它等效于字典i:v for i,v in enumerate(pos)IndexError,以防range(len(pos)) 中存在X.nodes() 中不存在的索引。因此,这仅在 X.nodes()range(len(pos)) 中的数字时才可用

以上是关于具有特定位置的networkx add_node的主要内容,如果未能解决你的问题,请参考以下文章

NetworkX节点属性绘制

python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径

如何使用 Networkx 包显示具有更好分离度的网络?

从 networkx 绘制以底图位置为中心的图形

如何用networkx绘制社区

根据节点值为networkx中的节点绘制不同的颜色