如何使用Python基于Graphviz绘制不同形状节点及箭头的结构图
实现方法
完全可以通过Python对接Graphviz实现带自定义节点样式、多形状箭头的结构图绘制,使用官方维护的graphvizPython库即可完成所有配置,无需手动编写原生DOT脚本。
前置准备
- 先在本地安装Graphviz核心程序,安装时勾选将程序路径加入系统环境变量,安装完成后可在命令行执行
dot -V验证是否安装成功
注意:必须先安装本地核心程序,仅安装Python依赖库无法正常运行绘图代码 - 执行pip命令安装Python依赖库:
pip install graphviz
核心配置说明
自定义节点样式
你提供的参考节点样式为白底黑边圆角矩形,可通过全局节点属性一次性配置,也可针对单个节点单独设置特殊样式:
from graphviz import Digraph # 初始化有向图,设置导出格式为png dot = Digraph(name='structure_chart', format='png') # 全局默认节点样式:匹配参考图的圆角矩形、黑边白底效果,设置中文字体避免乱码 dot.attr('node', shape='box', style='rounded', color='#000000', fillcolor='#ffffff', fontname='SimHei', margin='0.2,0.1')
如果需要其他形状节点,直接修改shape参数即可,支持圆形circle、菱形diamond、平行四边形parallelogram等常用流程图节点形状。
多形状箭头配置
Graphviz内置了全量常用箭头形状,直接给边设置arrowhead属性即可切换箭头样式,无需额外自定义:
- 常规实心箭头:
arrowhead='normal' - 空心箭头:
arrowhead='open' - 菱形箭头:
arrowhead='diamond' - 无箭头直线:
arrowhead='none' - 单侧半箭头:
arrowhead='halfopen' - 倒三角箭头:
arrowhead='inv'
如果需要双向箭头,同时配置arrowtail属性并添加dir='both'参数即可,箭头颜色、线型、线宽都可以通过对应属性调整。
完整可运行示例
# 添加节点 dot.node('start', '起始节点') dot.node('proc1', '业务处理节点1') dot.node('proc2', '业务处理节点2') dot.node('end', '结束节点') # 添加不同样式的连接边 dot.edge('start', 'proc1', arrowhead='normal') # 普通实心箭头 dot.edge('proc1', 'proc2', arrowhead='open', label='正常流转') # 空心箭头带文字标注 dot.edge('proc2', 'proc1', arrowhead='halfopen', style='dashed', label='流程回退') # 虚线半箭头 dot.edge('proc2', 'end', arrowhead='diamond') # 菱形箭头 # 渲染导出图片,设置view=True会在生成后自动打开图片 dot.render('chart_output', view=True)
如果需要更特殊的自定义箭头形态,可通过组合内置箭头片段实现,常规业务结构图、架构图的箭头需求用内置样式完全可以覆盖。
内容的提问来源于stack exchange,提问作者LLL
相关产品推荐
相关产品推荐

