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

NetworkX平行列节点布局求助:两类关联节点可视化实现

嘿,我懂你想要的那种双列平行排布的二分图效果!NetworkX 默认的布局算法(比如spring_layout)确实会把节点挤成一团网状,不过咱们完全可以手动指定节点坐标,轻松实现你要的平行列布局,下面直接上解决方案:

实现思路与代码示例

核心思路就是手动控制节点的x轴坐标:把客户/公司节点固定在左侧一列(x=0),产品节点固定在右侧一列(x=1),y轴坐标按顺序分配避免重叠,再把边连起来就行。

import networkx as nx
import matplotlib.pyplot as plt

# 替换成你的客户-产品映射字典
client_product_map = {
    "客户A": ["产品X", "产品Y"],
    "公司B": ["产品Z"],
    "客户C": ["产品X", "产品Z"]
}

# 1. 创建二分图结构
G = nx.Graph()
# 拆分两组节点,并用bipartite属性标记区分
clients = list(client_product_map.keys())
products = list({prod for prods in client_product_map.values() for prod in prods})
G.add_nodes_from(clients, bipartite=0)
G.add_nodes_from(products, bipartite=1)

# 2. 添加客户与产品的连接边
for client, prods in client_product_map.items():
    for prod in prods:
        G.add_edge(client, prod)

# 3. 手动设置节点位置:核心步骤!
pos = {}
# 客户节点全部放在x=0的列,y轴按顺序分配
for idx, client in enumerate(clients):
    pos[client] = (0, idx)
# 产品节点全部放在x=1的列,y轴按顺序分配
for idx, prod in enumerate(products):
    pos[prod] = (1, idx)

# 4. 绘制可视化图形
plt.figure(figsize=(8, 5))
# 分别绘制两组节点(用颜色区分)
nx.draw_networkx_nodes(G, pos, nodelist=clients, node_color='lightblue', node_size=1600)
nx.draw_networkx_nodes(G, pos, nodelist=products, node_color='coral', node_size=1600)
# 绘制连接边
nx.draw_networkx_edges(G, pos, edge_color='gray', width=2)
# 添加节点标签
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')

plt.title("客户/公司-产品平行列连接图")
plt.axis('off')  # 隐藏坐标轴
plt.tight_layout()
plt.show()
额外优化小技巧

如果节点数量多导致y轴重叠,可以调整y轴的间距,比如把pos[client] = (0, idx)改成pos[client] = (0, idx * 1.2),给节点留出更多垂直空间;要是想让同一客户连接的产品y坐标对齐,也可以根据客户的连接关系来分配产品的y轴位置,这个可以根据你的需求灵活调整。

内容的提问来源于stack exchange,提问作者James Gregorie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:00