如何根据Edge_wt值设置网络边厚度并显示有向边及权重
有向加权网络可视化实现方案
问题说明
已成功从文件导入测试网络,但无法实现以下可视化需求:
- 显示Source指向Target的有向边
- 根据
Edge_wt值设置边的厚度 - 在边上显示权重数值
测试数据集:
| Source | Target | Edge_wt |
|---|---|---|
| Air_temp | Bearing | 0.467 |
| Wind_Sp | Bearing | 0.469 |
| M1 Vib | Bearing | 0.386 |
| M2 Vib | Bearing | 0.63 |
| Temp1 | Bearing | 0.406 |
| Temp2 | Bearing | 0.33 |
实现代码(基于NetworkX + Matplotlib)
以下代码可直接实现所有需求,步骤清晰:
import networkx as nx import matplotlib.pyplot as plt import pandas as pd # 1. 加载数据集(替换为你的文件路径) df = pd.read_csv("network_data.csv") # 2. 创建有向图并添加节点、边 G = nx.DiGraph() for _, row in df.iterrows(): G.add_edge(row["Source"], row["Target"], weight=row["Edge_wt"]) # 3. 计算边厚度(乘以5放大权重差异,可按需调整) edge_widths = [G[u][v]['weight'] * 5 for u, v in G.edges()] # 4. 绘制可视化图 plt.figure(figsize=(10, 6)) # 固定布局种子,保证每次绘图位置一致 pos = nx.spring_layout(G, seed=42) # 绘制节点 nx.draw_networkx_nodes(G, pos, node_size=1500, node_color="#a8d1ff") # 绘制有向边,设置箭头样式和厚度 nx.draw_networkx_edges(G, pos, width=edge_widths, arrowstyle="->", arrowsize=20, edge_color="#333333") # 绘制节点标签 nx.draw_networkx_labels(G, pos, font_size=12, font_weight="bold") # 绘制边权重标签(保留三位小数) edge_labels = {(u, v): f"{G[u][v]['weight']:.3f}" for u, v in G.edges()} nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=10, label_pos=0.3) plt.title("有向加权测试网络") plt.axis("off") plt.show()
关键细节说明
- 用
nx.DiGraph()创建有向图,确保边的方向性正确 - 边厚度通过
width参数绑定Edge_wt值,乘以系数是为了让不同权重的边厚度差异更直观 label_pos=0.3控制权重标签在边的位置(0为起点,1为终点),可按需调整
内容的提问来源于stack exchange,提问作者Moonie
相关产品推荐
相关产品推荐

