Python Networkx权重标签定位

Python Networkx权重标签定位,python,graph,networkx,Python,Graph,Networkx,下面的代码在图形中生成了一个非常“狡猾”的边权重标签放置。请看图片。我希望有一个更好的位置(靠近每条线的中点),同时仍然利用节点的自动定位-即,我不想手动定位节点 有什么想法吗?还有一个警告-iterable函数在Matplotlib 3.1中已被弃用,将在3.3中删除。请改用np.iterable。如果有人知道如何解决,这将是一个很好的解决方法 import matplotlib.pyplot as plt import networkx as nx import numpy as np

下面的代码在图形中生成了一个非常“狡猾”的边权重标签放置。请看图片。我希望有一个更好的位置(靠近每条线的中点),同时仍然利用节点的自动定位-即,我不想手动定位节点

有什么想法吗?还有一个警告-
iterable函数在Matplotlib 3.1中已被弃用,将在3.3中删除。请改用np.iterable。
如果有人知道如何解决,这将是一个很好的解决方法

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np

G = nx.Graph()
G.add_nodes_from(["A", "B", "C"])
G.add_edge("A", "B", weight=5)
G.add_edge("B", "C", weight=7)
G.add_edge("C", "A", weight=2)

pos = nx.spring_layout(G)
weights = nx.get_edge_attributes(G, "weight")
nx.draw_networkx(G, with_labels=True)
nx.draw_networkx_edge_labels(G, pos, edge_labels=weights)

plt.show()
从:

因此,如果您没有显式地传递
pos
,将生成一个spring\u布局,但这与您通过

pos = nx.spring_layout(G)
,因为两次调用nx.spring_布局(G)会得到不同的结果:

for a in [0,1]:
    pos = nx.spring_layout(G)
    print(pos)
输出:

{'A': array([ 0.65679786, -0.91414348]), 'B': array([0.34320214, 0.5814527 ]), 'C': array([-1.        ,  0.33269078])}
{'A': array([-0.85295569, -0.70179415]), 'B': array([ 0.58849111, -0.29820585]), 'C': array([0.26446458, 1.        ])}
因此,将相同的
pos
传递给两个绘图函数可以解决问题:

pos = nx.spring_layout(G)
weights = nx.get_edge_attributes(G, "weight")
nx.draw_networkx(G, pos, with_labels=True)
nx.draw_networkx_edge_labels(G, pos, edge_labels=weights)

只需将
nx.draw\u networkx(G,带标签=True)
替换为
nx.draw\u networkx(G,pos,带标签=True)
如果你给我一个答案,我可以把它标记为已解决。
pos = nx.spring_layout(G)
weights = nx.get_edge_attributes(G, "weight")
nx.draw_networkx(G, pos, with_labels=True)
nx.draw_networkx_edge_labels(G, pos, edge_labels=weights)