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 定义实体关系模型,每条关系包含三个属性:subject、predicate、object。
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的SQLalchemy模块连接与操作MySQL的基础示例
SQLalchemy是Python世界中驱动MySQL的一款高人气模块,这里我们从入门开始来看一下Python的SQLalchemy模块连接与操作MySQL的基础示例:2016-07-07
Python的collections模块中的OrderedDict有序字典
字典是无序的,但是collections的OrderedDict类为我们提供了一个有序的字典结构,名副其实的Ordered+Dict,下面通过两个例子来简单了解下Python的collections模块中的OrderedDict有序字典:2016-07-07
python Matplotlib基础--如何添加文本和标注
这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下2021-01-01


最新评论