Python使用Mermaid与Graphviz实现关系图表生成的实战指南

 更新时间:2026年01月19日 08:17:48   作者:weixin_46244623  
这篇文章主要为大家详细介绍了两种Python生成关系图表的方法,即Mermaid和Graphviz,下面小编就和大家详细介绍一下具体的实现方法吧

在数据分析、系统建模或关系可视化场景中,我们常常需要将实体关系以图表形式展示。Python 社区中有两种流行的方案:

  • Mermaid:基于文本生成流程图、时序图、关系图,常用于文档和网页。
  • Graphviz:功能强大的图形可视化工具,支持 PNG、SVG 等多种输出格式。

本文将演示如何用 Python 测试生成 Mermaid 和 Graphviz 图表,并兼容中文显示。

一、准备工作

1. 安装依赖

pip install pydantic graphviz

注意:Graphviz 生成图像需要系统安装 Graphviz 可执行文件。

Ubuntu/Debian:

sudo apt-get install graphviz

macOS:

brew install graphviz

Windows:请从 Graphviz 官网 下载并安装。

二、定义关系模型

我们使用 pydantic 定义实体关系模型,每条关系包含三个属性:subjectpredicateobject

from pydantic import BaseModel, Field

class Relationship(BaseModel):
    subject: str = Field(...)
    predicate: str = Field(...)
    object: str = Field(...)

三、生成 Mermaid 图表

Mermaid 图表是文本驱动的,我们可以根据关系列表自动生成 Mermaid 流程图代码。

from graphviz_render import relationships_to_mermaid

# 示例关系
relationships = [
    Relationship(subject="用户", predicate="登录", object="系统"),
    Relationship(subject="系统", predicate="验证", object="身份"),
    Relationship(subject="数据库", predicate="存储", object="用户信息"),
    Relationship(subject="AI助手", predicate="处理", object="请求"),
    Relationship(subject="文档", predicate="描述", object="功能")
]

mermaid_code = relationships_to_mermaid(relationships)
print("生成的Mermaid代码:\n")
print(mermaid_code)

Mermaid 输出示例

四、生成 Graphviz 图表

Graphviz 可以直接生成图片文件(PNG、SVG),适合嵌入文档或网页。

from pathlib import Path
from graphviz_render import relationships_to_png

output_path = Path("./test_relationships.png")

try:
    relationships_to_png(relationships, output_path)
    print(f"Graphviz图表已保存到: {output_path.absolute()}")
except Exception as e:
    print(f"生成Graphviz图表时出错: {e}")
    print("可能原因:未安装Graphviz或中文字体缺失")

运行后,你将得到如下关系图:

用户 --登录--> 系统
系统 --验证--> 身份
数据库 --存储--> 用户信息
AI助手 --处理--> 请求
文档 --描述--> 功能

如果中文显示异常,可以在 Graphviz 中设置字体,例如:

dot.attr(fontname="Microsoft YaHei")

五、完整测试脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pydantic import BaseModel, Field
from pathlib import Path
from graphviz_render import relationships_to_mermaid, relationships_to_png

class Relationship(BaseModel):
    subject: str = Field(...)
    predicate: str = Field(...)
    object: str = Field(...)

def test_mermaid_generation():
    relationships = [
        Relationship(subject="用户", predicate="登录", object="系统"),
        Relationship(subject="系统", predicate="验证", object="身份"),
        Relationship(subject="数据库", predicate="存储", object="用户信息"),
        Relationship(subject="AI助手", predicate="处理", object="请求"),
        Relationship(subject="文档", predicate="描述", object="功能")
    ]
    mermaid_code = relationships_to_mermaid(relationships)
    print("生成的Mermaid代码:\n", mermaid_code)
    return relationships

def test_graphviz_generation(relationships):
    output_path = Path("./test_relationships.png")
    try:
        relationships_to_png(relationships, output_path)
        print(f"Graphviz图表已保存到: {output_path.absolute()}")
    except Exception as e:
        print(f"生成Graphviz图表时出错: {e}")

if __name__ == "__main__":
    rels = test_mermaid_generation()
    test_graphviz_generation(rels)

六、小结

  • Mermaid 适合快速生成文档内的关系图,依赖文本描述。
  • Graphviz 更专业,适合生成高质量图片,但需要安装系统依赖。
  • 中文显示需要注意字体配置,尤其是 Graphviz。

通过本文,你可以快速测试 Python 生成 Mermaid 和 Graphviz 图表,并进行中文支持处理。

到此这篇关于Python使用Mermaid与Graphviz实现关系图表生成的实战指南的文章就介绍到这了,更多相关Python生成关系图表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中405错误的原因分析与解决

    Python中405错误的原因分析与解决

    在Python开发中,尤其是进行网络请求和Web开发时,HTTP 405错误(Method Not Allowed)是一个常见的问题,本文将为大家分析一下405错误的原因以及解决方法,希望对大家有所帮助
    2024-11-11
  • Python 字典(Dictionary)操作详解

    Python 字典(Dictionary)操作详解

    这篇文章主要介绍了Python 字典(Dictionary)的详细操作方法,需要的朋友可以参考下
    2014-03-03
  • Python的SQLalchemy模块连接与操作MySQL的基础示例

    Python的SQLalchemy模块连接与操作MySQL的基础示例

    SQLalchemy是Python世界中驱动MySQL的一款高人气模块,这里我们从入门开始来看一下Python的SQLalchemy模块连接与操作MySQL的基础示例:
    2016-07-07
  • 详解Python连接oracle的问题记录与解决

    详解Python连接oracle的问题记录与解决

    这篇文章主要为大家详细介绍了Python连接oracle时会出现的一些问题记录与解决方法,文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2023-04-04
  • Python面向对象三大特征:继承、封装和多态的深度解析

    Python面向对象三大特征:继承、封装和多态的深度解析

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合,Python是面向对象的语言,支持面向对象编程的三大特性:继承、封装(隐藏)、多态,本文将逐一讲解Python的三大特性
    2025-01-01
  • Python的collections模块中的OrderedDict有序字典

    Python的collections模块中的OrderedDict有序字典

    字典是无序的,但是collections的OrderedDict类为我们提供了一个有序的字典结构,名副其实的Ordered+Dict,下面通过两个例子来简单了解下Python的collections模块中的OrderedDict有序字典:
    2016-07-07
  • python Matplotlib基础--如何添加文本和标注

    python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下
    2021-01-01
  • Python pip安装第三方库实现过程解析

    Python pip安装第三方库实现过程解析

    这篇文章主要介绍了Python pip安装第三方库实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python3判断IP地址的方法

    python3判断IP地址的方法

    这篇文章主要为大家详细介绍了python3判断IP地址的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • python使用yaml格式文件的方法

    python使用yaml格式文件的方法

    本文主要介绍了python使用yaml格式文件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论