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)