如何在NetworkX有向图中显示两节点间的定向连接次数
NetworkX定向边连接次数可视化实现方案
该需求完全可以在NetworkX中实现,核心思路是先统计每对定向节点的连接次数作为边的权重属性,绘制时将权重以边标签的形式展示即可,双向边的标签会自动错位避免重叠。
实现步骤
- 预处理边数据统计连接次数:直接传入原始边列表构建图会丢失重复边的计数信息,需要先统计每对
(from, to)定向组合的出现次数,作为边的weight属性存入图中。 - 可视化时展示边权重标签:使用NetworkX内置的
nx.draw_networkx_edge_labels方法,将边的权重属性作为标签绘制在对应边的旁侧即可,原有自定义节点样式的代码无需修改。
完整可运行示例代码
import pandas as pd import networkx as nx import matplotlib.pyplot as plt # 你的原始边数据 fromlist = ['A', 'A', 'A', 'B', 'B', 'A', 'C'] tolist = ['B', 'C', 'B', 'A', 'A', 'B', 'A'] # 统计每对定向边的连接次数 df = pd.DataFrame({'from': fromlist, 'to': tolist}) edge_count_df = df.value_counts(['from', 'to']).reset_index(name='weight') # 构建带权重的有向图 G = nx.from_pandas_edgelist(edge_count_df, source='from', target='to', edge_attr=['weight'], create_using=nx.DiGraph()) # 你原来的布局和绘图逻辑(可保留原有自定义样式参数) pos = nx.circular_layout(G) nx.draw(G, pos, with_labels=True, node_size=5500, font_size=7, node_shape="s", alpha=0.7, arrows=True, # 可选:边粗细和连接次数绑定,可视化效果更直观 width=[G[u][v]['weight']*2 for u,v in G.edges()] ) # 新增:绘制边的连接次数标签 edge_labels = nx.get_edge_attributes(G, 'weight') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, label_pos=0.6, # 调整标签在边上的位置,避免双向边标签重叠 font_size=7) plt.title("Directed") plt.show()
运行上述代码后,即可在有向图的对应定向边旁看到连接次数,比如A→B旁显示3、B→A旁显示2,完全符合你的需求。
内容的提问来源于stack exchange,提问作者rojabin
相关产品推荐
相关产品推荐

