Python 如何更改networkx图形中的节点位置? 我想根据值的字典更改networkx.DiGraph中的节点位置。 我的尝试:

Python 如何更改networkx图形中的节点位置? 我想根据值的字典更改networkx.DiGraph中的节点位置。 我的尝试:,python,matplotlib,graph,networkx,graph-algorithm,Python,Matplotlib,Graph,Networkx,Graph Algorithm,1) 首先,我生成一个字典,其中键作为节点名称,值作为X和Y坐标的元组,这是我的结果: {'Start': (2, 2), 'S0': (0, 0), 'S1': (1, 0), 'S2': (2, 0), 'S3': (3, 0), 'S4': (4, 0), 'S5': (5, 0), 'S6': (6, 0), 'S7': (7, 0), 'S8': (8, 0), 'S9': (9, 0), 'S10': (10, 0), 'S11': (11, 0), 'S12': (12, 0),

1) 首先,我生成一个字典,其中
作为
节点
名称,
作为
X
Y
坐标的
元组
,这是我的结果:

{'Start': (2, 2), 'S0': (0, 0), 'S1': (1, 0), 'S2': (2, 0), 'S3': (3, 0), 'S4': (4, 0), 'S5': (5, 0), 'S6': (6, 0), 'S7': (7, 0), 'S8': (8, 0), 'S9': (9, 0), 'S10': (10, 0), 'S11': (11, 0), 'S12': (12, 0), 'S13': (13, 0), 'S14': (14, 0), 'S15': (15, 0), 'S16': (16, 0), 'S17': (17, 0), 'S18': (18, 0), 'S19': (19, 0), 'S20': (20, 0), 'S21': (21, 0), 'S22': (22, 0), 'S23': (23, 0), 'S24': (24, 1), 'S25': (25, 1), 'S26': (26, 2), 'S27': (27, 2), 'S28': (28, 2), 'S29': (29, 3), 'S30': (30, 3), 'S31': (31, 3), 'S32': (32, 3), 'S33': (33, 3), 'S34': (34, 3), 'S35': (35, 3), 'S36': (36, 3), 'S37': (37, 3), 'S38': (38, 3), 'S39': (39, 3), 'S40': (40, 3), 'S41': (41, 3), 'S43': (43, 3), 'S44': (44, 3), 'S45': (45, 3), 'S47': (47, 3), 'S48': (48, 3), 'S49': (49, 3), 'S50': (50, 3), 'S51': (51, 3), 'S42': (42, 3), 'S46': (46, 3), 'Finish': (2, 2)}
2) 然后我从列表中生成
节点
,并使用
G.add_Nodes_from(Nodes)
(下面是
节点
列表):

3) 最后但并非最不重要的一点是,我生成了边(数据太大,无法放在这里)

4) 然后我把所有这些都放在一起:

5) 当我绘制图表时,我得到的是:

nx.draw_shell(G, with_labels = True, node_size = 500)

有什么问题吗?
  • 正如你所看到的,这些位置并不是我定义的那样
  • 奇怪的是,当我用这个命令打印出
    节点的属性时:
    pos=nx.get\u node\u attributes(G,'pos')
    。我能在正确的位置看到我所有的位置
  • 如何使图形在所需位置绘制
    节点

  • 编辑:
    • 将命令从
      nx.draw\u shell
      更改为
      nx.draw
      似乎没有帮助

    您可以使用
    pos
    参数将位置字典(键是节点,值是二维坐标)传递给更通用的
    draw\u networkx
    函数:

    nx.draw_networkx(G,pos= positions,with_labels=True,node_color=node_color,node_size=500)
    

    请注意,
    nx.draw\u shell
    将根据shell布局算法来布局您的网络。

    答案太好了!工作就像一种魅力。
    nx.draw_shell(G, with_labels = True, node_size = 500)
    
    nx.draw_networkx(G,pos= positions,with_labels=True,node_color=node_color,node_size=500)