You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:18:04