You need to enable JavaScript to run this app. 如何使用Python在Graphviz中调用自定义节点形状?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在Graphviz中调用自定义节点形状?

Python生成Graphviz图表自定义节点形状实现方案

Graphviz默认节点形状示意图

针对自定义节点形状的需求,有两种常用实现方案:

方案1:使用Graphviz内置扩展节点形状

Graphviz本身内置了上百种预设节点形状,无需引入外部资源,直接指定节点的shape属性即可调用。

前置依赖

首先确保你已经安装了两部分依赖:

  • Python第三方库:pip install graphviz
  • 本地Graphviz引擎:需下载对应系统版本的Graphviz主程序安装,仅安装Python库无法正常渲染

代码示例

import graphviz

# 初始化有向图实例,指定输出格式为png
dot = graphviz.Digraph('custom_shape_demo', format='png')

# 单个节点独立设置形状
dot.node('node1', label='椭圆', shape='ellipse')
dot.node('node2', label='菱形', shape='diamond')
dot.node('node3', label='平行四边形', shape='parallelogram')
dot.node('node4', label='文件夹', shape='folder')
dot.node('node5', label='六边形', shape='hexagon')
dot.node('node6', label='3D盒子', shape='box3d')

# 全局配置默认节点形状,后续新增节点默认复用该配置
dot.attr('node', shape='cylinder')
dot.node('node7', label='圆柱')

# 添加节点连接边
dot.edges(['12', '23', '34', '45', '56', '67'])

# 渲染输出到本地文件,view=True会自动打开预览
dot.render('custom_shapes_demo', view=True)

常用内置形状还包括house、invhouse、underline、note、tab等,可覆盖绝大多数常规使用场景。

方案2:使用外部自定义图像作为节点形状

如果内置形状无法满足个性化需求,可以直接使用自定义的png、svg等格式图像作为节点形状。

代码示例

import graphviz

dot = graphviz.Digraph('custom_image_demo', format='png')

# 配置自定义图像节点,shape设为none隐藏默认形状边框,image参数填自定义图像的路径
dot.node(
    'custom_node', 
    label='自定义节点', 
    shape='none', 
    image='./your_custom_shape.svg', 
    width='1.2', 
    height='1.2',
    labelloc='b' # 标签显示在图像底部
)
dot.node('normal_node', label='普通默认节点')
dot.edge('custom_node', 'normal_node')

dot.render('custom_image_node', view=True)

注意事项

  • 自定义图像建议使用绝对路径,避免相对路径引发的文件找不到报错
  • 优先使用svg矢量图作为自定义节点素材,放大后不会出现模糊问题
  • 批量节点使用同一种自定义配置时,可通过dot.attr('node', 配置项)全局设置,无需重复为单个节点赋值

内容的提问来源于stack exchange,提问作者Ferda-Ozdemir-Sonmez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 11:45:06