【问题标题】:networkx add_node with specific position具有特定位置的networkx add_node
【发布时间】: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 的图形中

【问题讨论】:

    标签: python networkx


    【解决方案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 我可能迟到了,但据我所知,没有直接的函数可以计算两个节点之间的欧几里得距离。作为参考,您可以使用不久前给我的这个答案:stackoverflow.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)) 中的数字时才可用
      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 2014-07-28
      • 2023-02-14
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多