python - 根据 NetworkX 中的权重改变边缘的厚度

标签 python networkx

我正在尝试使用 Python Networkx 包绘制网络图。我想根据赋予边缘的权重来改变边缘的厚度。
我正在使用以下绘制图表的代码,但我无法根据重量使边缘改变其厚度。有人可以帮我解决这个问题吗?提前致谢。

df = pd.DataFrame({ 'from':['D', 'A', 'B', 'C','A'], 'to':['A', 'D', 'A', 'E','C'], 'weight':['1', '5', '8', '3','20']})
G=nx.from_pandas_edgelist(df, 'from', 'to', edge_attr='weight', create_using=nx.DiGraph() )
nx.draw_shell(G, with_labels=True, node_size=1500, node_color='skyblue', alpha=0.3, arrows=True, 
              weight=nx.get_edge_attributes(G,'weight').values())

最佳答案

为了设置每条边的宽度,即具有类似数组的边,您必须使用 nx.draw_networkx_edges 通过宽度参数,因为 nx.draw只接受一个浮点数。权重可以通过 nx.get_edge_attributes 获得.
您也可以使用 nx.shell_layout 绘制外壳布局。并使用它来定位节点而不是 nx.draw_shell :

import networkx as nx
from matplotlib import pyplot as plt

widths = nx.get_edge_attributes(G, 'weight')
nodelist = G.nodes()

plt.figure(figsize=(12,8))

pos = nx.shell_layout(G)
nx.draw_networkx_nodes(G,pos,
                       nodelist=nodelist,
                       node_size=1500,
                       node_color='black',
                       alpha=0.7)
nx.draw_networkx_edges(G,pos,
                       edgelist = widths.keys(),
                       width=list(widths.values()),
                       edge_color='lightblue',
                       alpha=0.6)
nx.draw_networkx_labels(G, pos=pos,
                        labels=dict(zip(nodelist,nodelist)),
                        font_color='white')
plt.box(False)
plt.show()
enter image description here

关于python - 根据 NetworkX 中的权重改变边缘的厚度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62935983/

相关文章:

python - 这个切片是什么意思[:, :, 0]?

python - networkx 中可用的属性列表

python - 向networkx添加子节点(附图)

python - 对具有共享端节点的边进行采样

python - 如何识别字符串数据集中的文本模板模式?

python - Discord.py purge 命令中的人员列表和已删除消息数

python - wrapper() 得到了一个意外的关键字参数 'id'

c++ - 像在 python 和 R 中一样单步执行 C++ 程序

python-2.7 - NetworkX - 在图上寻找点的自然簇

python - 对象不可订阅 networkx