Python Networkx绘制边权重对应大小的气泡可视化方案求助
实现方法
核心思路是手动计算每条边的中点坐标,在中点位置绘制与权重正相关的圆形散点即可,修改后的完整可运行代码如下:
import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() G.add_node('A', pos=(0,5)) G.add_node('B', pos=(3,12)) G.add_node('C', pos=(3,6)) G.add_node('D', pos=(7,-4)) weights = [1, 1, 2, 3, 2, 4] G.add_edge('A', 'B', weight=weights[0]) G.add_edge('A', 'C', weight=weights[1]) G.add_edge('A', 'D', weight=weights[2]) G.add_edge('B', 'C', weight=weights[3]) G.add_edge('B', 'D', weight=weights[4]) G.add_edge('C', 'D', weight=weights[5]) pos = nx.get_node_attributes(G,'pos') labels = nx.get_edge_attributes(G, 'weight') nx.draw(G, pos, with_labels=True, node_color='lightblue') nx.draw_networkx_edges(G, pos, width=weights) # 新增气泡绘制逻辑 mid_points = [] bubble_sizes = [] for u, v, data in G.edges(data=True): # 计算边的中点坐标 x1, y1 = pos[u] x2, y2 = pos[v] mid_x = (x1 + x2) / 2 mid_y = (y1 + y2) / 2 mid_points.append((mid_x, mid_y)) # 气泡大小和权重正相关,200为缩放系数,可按需调整 bubble_sizes.append(data['weight'] * 200) # 绘制气泡,设置透明度避免遮挡内容 plt.scatter([x for x, y in mid_points], [y for x, y in mid_points], s=bubble_sizes, c='white', edgecolors='black', alpha=0.7, zorder=2) # 边权重标签放在最上层避免被遮挡 nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, zorder=3) plt.axis('equal') # 保证坐标比例一致,圆形不会变形 plt.show()
可调整参数说明
- 气泡尺寸:代码中
200为全局缩放系数,数值越大所有气泡整体越大,可根据显示需求调整 - 气泡样式:
c参数修改填充色,edgecolors修改边框色,alpha修改透明度,zorder控制图层顺序,保证气泡在边之上、权重标签之下即可 - 若不需要保留原有的边宽度效果,删除
nx.draw_networkx_edges的width=weights参数即可
内容的提问来源于stack exchange,提问作者UvW
相关产品推荐
相关产品推荐

