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

如何用Python根据数据表自动绘制并优化符合要求的有向图?

优化有向图可视化与自动绘制实现

问题背景

现有一份包含节点及前置节点的数据表,需要将其可视化为分层结构的有向图,之前使用NetworkX默认绘图效果不佳,需实现从数据表自动生成指定样式图形的功能。

数据表内容:

point,previous_point
"A","-"
"B","-"
"C","A"
"D","B"
"E","C"
"F","C"
"G","D,E"
"H","F,G"

原尝试代码(效果不理想):

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()

G.add_edges_from(
[('Start','A'),('Start','B'),
('A','C'),('B','D'),('C','E'),('C','F'),
 ('D','G'),('E','G'),('F','H'),('G','H'),
 ('H','End')])

nx.draw(G, with_labels=True)
plt.show()

优化方案

要实现分层布局的有向图,需借助Graphviz的dot布局算法(需先安装pygraphviz依赖),同时实现从数据表自动解析节点关系的逻辑。

完整实现代码

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd

# 1. 读取并解析数据表
df = pd.read_csv("nodes_data.csv")  # 替换为你的数据表路径
G = nx.DiGraph()

# 添加Start和End节点
G.add_node("Start")
G.add_node("End")

# 遍历数据表构建边
for _, row in df.iterrows():
    point = row["point"].strip('"')
    prev_points = row["previous_point"].strip('"')
    
    if prev_points == "-":
        # 根节点,连接到Start
        G.add_edge("Start", point)
    else:
        # 拆分多个前置节点
        for prev in prev_points.split(","):
            G.add_edge(prev.strip(), point)

# 找到所有无后继的节点,连接到End
end_candidates = [n for n in G.nodes if G.out_degree(n) == 0 and n not in ["Start", "End"]]
for node in end_candidates:
    G.add_edge(node, "End")

# 2. 使用Graphviz的dot布局实现分层效果
pos = nx.nx_agraph.graphviz_layout(G, prog="dot")

# 3. 优化绘图样式
plt.figure(figsize=(10, 6))
nx.draw(G, pos, 
        with_labels=True,
        node_size=1500,
        node_color="#f0f0f0",
        edge_color="#666666",
        arrowstyle="->",
        arrowsize=15,
        font_size=12,
        font_weight="bold")

plt.title("分层有向图")
plt.show()

关键优化点

  • 分层布局:使用graphviz_layout的dot布局,自动实现节点的分层排列,符合流程类图形的视觉逻辑
  • 自动解析数据表:处理多前置节点(如G的前置为D,E)、根节点(前置为-)的情况,自动添加Start/End节点
  • 样式优化:调整节点大小、颜色、箭头样式、字体,提升图形可读性

依赖安装

需先安装必要依赖:

pip install networkx matplotlib pandas pygraphviz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:05:37