如何使用NetworkX读取CSV数据生成带箭头的工艺流程图?
NetworkX 读取CSV生成带箭头工艺流程图实现方案
1. 前置约定
首先明确你的CSV需至少包含两列:第一列为上游节点,第二列为下游节点,可新增第三列作为边的工序说明,示例CSV结构如下:
source,target,process 原料仓,破碎车间,皮带输送 破碎车间,磨矿车间,渣浆泵给料 磨矿车间,浮选车间,旋流分级 浮选车间,精矿库,压滤脱水
2. 完整实现代码
需先安装基础依赖:pip install networkx pandas matplotlib
import pandas as pd import networkx as nx import matplotlib.pyplot as plt # 读取本地CSV文件 df = pd.read_csv("你的CSV文件路径.csv") # 初始化有向图:这是生成带箭头边的核心,不要使用无向Graph类 G = nx.DiGraph() # 批量添加边,带工序属性 for _, row in df.iterrows(): G.add_edge(row["source"], row["target"], process=row.get("process", "")) # 选择布局,推荐dot层级布局,最符合工艺流程图的逻辑 > 注意:dot布局依赖graphviz引擎和pygraphviz库,Linux可先执行`sudo apt install graphviz libgraphviz-dev`,Windows可直接下载对应版本的pygraphviz whl包安装,不想额外安装依赖可以直接替换为NetworkX自带的spring_layout pos = nx.nx_agraph.graphviz_layout(G, prog="dot") # 无需额外依赖的备选布局 # pos = nx.spring_layout(G, k=2, iterations=150) # 绘制节点 nx.draw_networkx_nodes(G, pos, node_size=3500, node_color="lightblue", edgecolors="black") # 绘制节点文字标签 nx.draw_networkx_labels(G, pos, font_size=10, font_weight="bold") # 绘制带箭头的边,调整箭头大小样式 nx.draw_networkx_edges(G, pos, edgelist=G.edges(), arrowstyle="->", arrowsize=25, edge_color="gray") # 如需显示边的工序说明,打开下方两行代码 # edge_labels = nx.get_edge_attributes(G, "process") # nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8) # 隐藏画布边框 plt.axis("off") # 调整画布尺寸避免内容截断 plt.gcf().set_size_inches(12, 9) # 保存或显示图片 plt.savefig("工艺流程图.png", dpi=300, bbox_inches="tight") plt.show()
3. 效果调整方法
- 节点顺序不符合预期:可手动给每个节点指定坐标,或在CSV中新增节点层级列,读取后按层级设置pos参数
- 箭头方向不对:调整
graphviz_layout的prog参数,dot为从上到下布局,fdp为从左到右布局,neato为自由分布布局 - 节点重叠:调整spring_layout的
k参数,数值越大节点间距越大
内容的提问来源于stack exchange,提问作者Sahil Merali
相关产品推荐
相关产品推荐

