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

如何用Python NetworkX绘制分层网络图并按用户输入确定父子节点连接

实现方案

一、NetworkX原生实现方案

你要的效果完全可以基于NetworkX实现,不需要换库,核心是手动指定分层坐标实现固定布局,再加交互式询问生成边即可。

完整实现代码

import networkx as nx
import matplotlib.pyplot as plt

# 1. 定义分层节点
layer1 = ["Node1"]
layer2 = ["Node2", "Node3"]
layer3 = [f"Node{i}" for i in range(4, 8)]
layer4 = [f"Node{i}" for i in range(8, 12)]
all_nodes = layer1 + layer2 + layer3 + layer4

# 2. 自定义分层坐标,固定各层位置
pos = {}
# 第一层x=0,y坐标居中
pos["Node1"] = (0, 0)
# 第二层x=2,上下分布两个节点
pos["Node2"] = (2, 1)
pos["Node3"] = (2, -1)
# 第三层x=4,均匀分布4个节点
for idx, node in enumerate(layer3):
    pos[node] = (4, 1.5 - idx * 1)
# 第四层x=6,均匀分布4个节点
for idx, node in enumerate(layer4):
    pos[node] = (6, 1.5 - idx * 1)

# 3. 交互式询问生成边
edges = [("Node1", "Node2"), ("Node1", "Node3")] # 第一层到第二层的固定边
# 询问第二层到第三层的连接
print("=== 确认第二层到第三层的边连接 ===")
for u in layer2:
    for v in layer3:
        res = input(f"{u} 与 {v} 是否存在边?输入y确认,其他输入视为不存在:").strip().lower()
        if res == "y":
            edges.append((u, v))
# 询问第三层到第四层的连接
print("=== 确认第三层到第四层的边连接 ===")
for u in layer3:
    for v in layer4:
        res = input(f"{u} 与 {v} 是否存在边?输入y确认,其他输入视为不存在:").strip().lower()
        if res == "y":
            edges.append((u, v))

# 4. 构建有向图并绘图
G = nx.DiGraph()
G.add_nodes_from(all_nodes)
G.add_edges_from(edges)

plt.figure(figsize=(12, 8))
# 绘制矩形节点
nx.draw_networkx_nodes(
    G, pos, 
    node_size=3000, 
    node_shape="s", # s代表正方形,如需更扁的矩形可以自定义matplotlib的marker
    node_color="lightblue",
    edgecolors="black"
)
# 绘制带箭头的边
nx.draw_networkx_edges(
    G, pos,
    arrowstyle="->",
    arrowsize=20,
    edge_color="gray"
)
# 绘制外置标签,坐标向右偏移0.3实现外置效果
label_pos = {node: (coord[0]+0.3, coord[1]) for node, coord in pos.items()}
nx.draw_networkx_labels(G, label_pos, font_size=12)

plt.axis("off")
plt.tight_layout()
plt.show()

关键配置说明

  • 分层布局:手动给每个节点指定x、y坐标,确保同层节点x坐标一致,y坐标上下均匀分布,完全符合你要的排布效果
  • 节点样式:node_shape="s"指定为矩形,可调整node_size参数改变矩形大小
  • 标签外置:将标签的x坐标相对节点位置偏移0.3,实现标签在节点外部展示

二、更适配的可选库

如果你的需求后续会扩展更复杂的分层布局、交互能力,可选择以下更适配的库:

  • PyGraphviz:原生支持dot分层布局,不需要手动计算坐标,只需要给节点设置层级属性即可自动完成整齐的分层排布,节点样式、边样式自定义能力更强,渲染效果更专业
  • Plotly:适合做交互式分层网络图,支持节点悬停展示详情、拖拽调整位置,可导出为HTML交互式文件,分享和展示体验更好
  • Diagrams:如果是绘制架构类分层图,该库专门面向架构图场景,内置大量行业通用节点图标,代码写法更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:04