【发布时间】:2020-11-27 11:48:47
【问题描述】:
我正在尝试使用 networkx 库中的加权边创建一个有向图。如图所示的图表是我试图实现的目标
这是我目前得到的代码
import networkx as nx
import matplotlib.pyplot as plt
import pandas as panda
df = panda.DataFrame({'from':['R','R','D04','D04','D06','D06'], 'to':['D04','D06','R','D06','R','D04']})
G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.DiGraph())
G['R']['D04']['weight'] = 243.0
G['R']['D06']['weight'] = 150.0
G['D06']['D04']['weight'] = 211.0
pos = nx.spring_layout(G)
labels = nx.get_edge_attributes(G,'weight')
nx.draw_networkx_edge_labels(G,pos, edge_labels=labels)
# Make the graph
nx.draw(G, with_labels=True, node_size=1500, alpha=0.3, font_weight="bold", arrows=True)
plt.axis('on')
plt.show()
我得到的图片:
我很难弄清楚如何启用 X/Y 轴。我不知道不同节点的位置,只知道路由器节点('R')应该放在(0,0)中。此外,我的边缘权重似乎是随机放置的。有时它们放置得很好,有时它们会飞走。最后,定向边缘似乎是直的,而不是如所希望的那样弯曲。我读过应该有一个名为“connectionstyle”的属性,但似乎无法让它工作。
【问题讨论】:
标签: python python-3.x pandas matplotlib networkx