繁体   English   中英

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

[英]Vary thickness of edges based on weight in NetworkX

我正在尝试使用 Python Networkx package 绘制网络图。 我想根据赋予边缘的权重来改变边缘的厚度。

我正在使用以下代码绘制图表,但我无法让边缘根据重量改变其厚度。 有人可以帮我解决这个问题吗? 提前致谢。

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())

为了设置每条边的宽度,即使用类似数组的边,您必须通过 width 参数使用nx.draw_networkx_edges ,因为nx.draw只接受一个浮点数。 权重可以通过nx.get_edge_attributes

您也可以使用nx.shell_layout绘制 shell 布局并将其用于 position 节点而不是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()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM