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

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

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

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


一、准备工作

1. 安装依赖

pipinstallpydantic graphviz

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

  • Ubuntu/Debian:
sudoapt-getinstallgraphviz
  • macOS:
brewinstallgraphviz
  • Windows:请从 Graphviz 官网 下载并安装。

二、定义关系模型

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

frompydanticimportBaseModel,FieldclassRelationship(BaseModel):subject:str=Field(...)predicate:str=Field(...)object:str=Field(...)

三、生成 Mermaid 图表

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

fromgraphviz_renderimportrelationships_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),适合嵌入文档或网页。

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

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

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

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

dot.attr(fontname="Microsoft YaHei")

五、完整测试脚本

#!/usr/bin/env python# -*- coding: utf-8 -*-frompydanticimportBaseModel,FieldfrompathlibimportPathfromgraphviz_renderimportrelationships_to_mermaid,relationships_to_pngclassRelationship(BaseModel):subject:str=Field(...)predicate:str=Field(...)object:str=Field(...)deftest_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)returnrelationshipsdeftest_graphviz_generation(relationships):output_path=Path("./test_relationships.png")try:relationships_to_png(relationships,output_path)print(f"Graphviz图表已保存到:{output_path.absolute()}")exceptExceptionase:print(f"生成Graphviz图表时出错:{e}")if__name__=="__main__":rels=test_mermaid_generation()test_graphviz_generation(rels)

六、小结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:Python3:Fifteenth 类型注解(Type Hints)

完整教程:Python3:Fifteenth 类型注解(Type Hints)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

从零开始成为AI大模型产品经理:这份超全指南,建议立即收藏_AI模型产品经理学习路线

文章提供AI大模型产品经理七阶段学习路线:从计算机基础、编程语言、数学知识到机器学习、深度学习、NLP等核心技术,再到产品思维培养、数据驱动决策、技术选型与API集成,最后通过实战演练和软实力提升,帮助零基础人士系统掌握&quo…

告别代码!我用Trae氛围编程的方式,开发了一款公众号文章同步插件!

大家好,我是编程乐趣。我利用周末时间,没有写任何一行代码,用Trae氛围编程的方式,完成一个浏览器插件的开发。最大的感受是,未来编程方式,对阅读代码、代码语法、编程语言等能力变得不再重要,懂得与AI对方才是最…

AI大模型学习完整路线图:AI大模型学习全攻略,程序员必备的五阶段学习路线图

文章提供AI大模型学习的五阶段路线图:基础准备、机器学习核心、深度学习核心、专精方向和实践进阶。采用三步走战略:打好基础、深入核心、专精方向,强调实践与理论结合,并提供了具体学习资源和时间规划建议,帮助小白或…

TDengine C# 语言连接器进阶指南

本指南面向已完成“能连通、能读写”的开发者,补齐高级用法与易踩坑点。 1. 连接参数进阶与调优 WebSocket 连接增强参数 WebSocket 连接除基础参数外,还支持: connTimeout:连接超时(默认 1 分钟)readT…

Node.js和包管理工具

Node.js 和 npm 是现代 JavaScript 开发中两个密切相关但功能不同的工具。下面分别解释它们的定义以及它们之间的关系。 一、什么是 Node.js? Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的运行时环境(Runtime Environment)&#xff…

人工智能之数据分析 Pandas:第二章 Series - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

为什么大多数 LLM 在金融和医疗中会“系统性偏保守”

一个常见误解很多人认为:“模型在高风险场景中偏保守,是因为安全对齐或合规要求。”这只是表象。真正原因:执行态被风险信号劫持在缺乏执行态约束的系统中:风险词情绪词责任暗示会直接触发模型进入:防御 / 回避 / 模糊…

WSL2 Win11 Ubuntu22.04 D盘安装 参考的教程记录

主要参考这个教程下载:https://kwanwaipang.github.io/WSL/ 怎样移动到D盘:https://zhuanlan.zhihu.com/p/23313784318

企业内部模型上线前,必须补上的一项测试:执行态稳定性

一个现实问题很多企业在模型上线前,会测试:准确率延迟成本幻觉率但几乎不测试:执行态是否稳定为什么这是一个严重缺口因为事故往往不是:完全错误而是:执行态不一致上线前最小 Gate 清单(简化版)…

通用 LLM 执行态稳定性标准(Draft v1.0)Universal LLM Execution State Stability Standard · U-ESS v1.0 发布

好,这一步我会完全按 CSDN 的“工程师可读 不被当成情绪输出 不显得在挑事”的发布逻辑来做。 下面是 可直接发布到 CSDN 的成稿版本,不是草稿、不是概要,你复制即可发。通用 LLM 执行态稳定性标准(Draft v1.0)——高…

调色板示例颜色数据获取-基于 Flutter × OpenHarmony

文章目录调色板示例颜色数据获取-基于 Flutter OpenHarmony前言背景Flutter Harmony OpenHarmony 跨端开发介绍开发核心代码代码解析心得总结调色板示例颜色数据获取-基于 Flutter OpenHarmony 前言 在移动端开发中,颜色调色板是 UI 设计和视觉一致性的核心元素…

【多智能体控制】多智能体点对点转移的分布式模型预测控制【含Matlab源码 14976期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

UE 增强输入(2)

(10) (11) 谢谢

dify制作的工作流如何通过API调用

大家在基于dify开发Workflow和Agent,一般都是通过dify提供app功能直接提供使用,或者通过嵌入到其他页面中使用,但是还有一种情况,特别是针对各种数据处理的Workflow,需要通过程序调用,返回数据供其他app使用。该如何做呢?本文主要基于dify,将通过工作流发布的API,通过…

(5-2)UCLASS(..) 的参数

(12) (13) 谢谢

远程Ubantu Mysql安装 + 本地Windows Navicat连接

远程Ubantu Mysql安装 + 本地Windows Navicat连接安装过程 Mysql安装配置过程Mysql在ubantu安装直接使用apt命令安装sudo apt-get install mysql-server mysql-client -y启动mysql服务sudo systemctl start mysql使用r…

CCF T3

CCF T3 没什么太特殊的,注意到全局旋转操作复杂度太高,考虑打个懒标记进行局部旋转。(别忘了对翻转标记进行旋转,因为这么一个唐诗问题调了2h我也是神人了) #include<bits/stdc++.h> using namespace std; …

2026年国产时序数据库市场全景:从技术突破到行业落地

摘要&#xff1a; 进入2026年&#xff0c;在“数字中国”与工业物联网浪潮的强劲推动下&#xff0c;国产时序数据库市场持续繁荣&#xff0c;竞争格局日趋清晰。本文将对当前主流的国产时序数据库进行梳理盘点&#xff0c;并特别聚焦于金仓数据库&#xff08;Kingbase&#xff…

Ubuntu安装Lamp

Ubuntu安装Lamp本文将为您提供一个在Ubuntu服务器上搭建LAMP(Linux, Apache, MySQL, PHP)环境的完整指南。通过本文,您将学习如何安装和配置Apache、MySQL、PHP,并将您的PHP项目部署到服务器上。本文适用于Ubuntu …