使用 Python 测试 Mermaid 与 Graphviz 图表生成(支持中文)

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

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

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


一、准备工作

1. 安装依赖

bash 复制代码
pip install pydantic graphviz

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

  • Ubuntu/Debian:
bash 复制代码
sudo apt-get install graphviz
  • macOS:
bash 复制代码
brew install graphviz

二、定义关系模型

我们使用 pydantic 定义实体关系模型,每条关系包含三个属性:subject、predicate、object。

python 复制代码
from pydantic import BaseModel, Field

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

三、生成 Mermaid 图表

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

python 复制代码
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 输出示例

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

你可以将上面的代码复制到 Mermaid Live Editor 查看效果。


四、生成 Graphviz 图表

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

python 复制代码
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 中设置字体,例如:

python 复制代码
dot.attr(fontname="Microsoft YaHei")

五、完整测试脚本

python 复制代码
#!/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 图表,并进行中文支持处理。

相关推荐
2601_9669496535 分钟前
如何判断实时行情数据是否已经更新?从时间戳、交易时段到行情有效性
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
MoRanzhi120338 分钟前
106.正则问题(分治)
python·算法·正则表达式·蓝桥杯·递归·分治算法·字符串处理
Pingred1 小时前
我把一个私有化 RAG 系统真正跑通了:LocalRAG v0.1.0 发布
人工智能·python
Dmz丶1 小时前
前端转 AI 100 天 Day 24:API 测试——用 httpx + pytest 测 FastAPI
python
东莞市云毅网络有限公司1 小时前
监测问句清单去重:停用词表、数字归一与贪心聚类的参数取法
python·数据清洗·rag·企业知识库·文档解析
雪域迷影2 小时前
Python Django 7 小时课程
开发语言·python·django
量化吞吐机2 小时前
最高最低都一样,价格就同样集中吗
人工智能·python
FITA阿泽要努力2 小时前
如何调用 LLM 接口
python·api·agent
江湖中的阿龙2 小时前
大模型应用怎么做评测?从样本集、自动评分到上线回归的完整实战
人工智能·python·回归·大模型评测
雾游2 小时前
用上 uv 后,搭建 Python 项目终于顺手了:从安装到环境恢复,一篇讲清
python