Mermaid.js饼图与柱状图:数据可视化的轻量级解决方案
你是否还在为复杂数据报表的可视化发愁?是否觉得专业图表工具学习成本太高?本文将介绍如何使用Mermaid.js这一轻量级图表库,通过简单的文本描述快速创建专业的饼图和柱状图,让你的数据展示变得轻松高效。读完本文,你将能够掌握Mermaid.js饼图和柱状图的基本语法、高级配置以及实际应用场景,轻松应对日常工作中的数据可视化需求。
Mermaid.js简介
Mermaid.js是一个基于JavaScript的开源图表绘制工具,它允许用户使用简单的文本描述来生成各种图表,包括流程图、序列图、甘特图等多种类型。与传统的图表绘制工具相比,Mermaid.js具有轻量化、易集成、代码即图表等优点,特别适合在文档、博客、演示文稿等场景中快速插入高质量图表。
官方文档:docs/intro/getting-started.md
为什么选择Mermaid.js进行数据可视化
- 简单易学:使用直观的文本语法,无需复杂的图形界面操作
- 高度可定制:支持多种主题和样式配置,满足不同场景需求
- 轻量级:核心库体积小,加载速度快
- 易于集成:可与各种文档工具、博客平台无缝集成
- 开源免费:基于MIT许可证,可自由使用和修改
饼图(Pie Chart)详解
饼图(Pie Chart)是一种 circular statistical graphic(圆形统计图形),通过将圆形分割成不同大小的扇形来展示数据的比例关系。Mermaid.js提供了简洁而强大的饼图绘制功能,让你能够快速创建专业的饼图。
基本语法
创建饼图的基本语法非常简单,只需遵循以下步骤:
- 以
pie关键字开始定义饼图 - 可选:使用
showData关键字显示具体数据值 - 可选:使用
title关键字添加标题 - 定义数据项,格式为:"数据标签" : 数据值
pie showData
title 产品X的关键成分
"钙" : 42.96
"钾" : 50.05
"镁" : 10.01
"铁" : 5
语法参考:docs/syntax/pie.md
高级配置
Mermaid.js饼图支持多种高级配置选项,让你可以根据需要定制图表的外观和行为。
文本位置调整
通过textPosition参数可以控制饼图中标签文本的位置,取值范围为0.0(中心)到1.0(外圈):
%%{init: {"pie": {"textPosition": 0.9}, "themeVariables": {"pieOuterStrokeWidth": "5px"}}}%%
pie
title 靠近边界的标签:产品X
"钙" : 42.96
"钾" : 50.05
"镁" : 10.01
"铁" : 5
主题变量配置
可以通过主题变量自定义饼图的外观,如外边框宽度、颜色等:
%%{init: {"pie": {"textPosition": 0.45}, "themeVariables": {"pieOuterStrokeWidth": "5px", "pieSectionColors": ["#ff6347", "#4682b4", "#32cd32", "#ffa500"]}}}%%
pie
title 自定义颜色的饼图:编程语言分布
"JavaScript" : 30
"Python" : 25
"Java" : 20
"C#" : 15
"其他" : 10
完整配置选项:docs/config/configuration.md
实际应用示例
饼图适用于展示分类数据的占比关系,以下是几个常见的应用场景:
市场份额分析
pie showData
title 2023年智能手机市场份额
"三星" : 21.8
"苹果" : 17.6
"小米" : 14.1
"传音" : 10.5
"OPPO" : 9.8
"vivo" : 8.2
"其他" : 18.0
资源分配展示
pie
title 项目预算分配
"人力成本" : 45
"硬件设备" : 25
"软件许可" : 15
"培训费用" : 10
"应急储备" : 5
饼图演示页面:demos/pie.html
柱状图(Bar Chart)详解
Mermaid.js通过XY Chart模块支持柱状图绘制,同时还支持折线图等其他类型,提供了丰富的数据可视化能力。
基本语法
创建柱状图的基本语法如下:
- 以
xychart-beta关键字开始定义图表 - 可选:使用
horizontal关键字创建水平柱状图 - 使用
title关键字添加标题 - 使用
x-axis和y-axis定义坐标轴 - 使用
bar关键字定义柱状图数据系列
xychart-beta
title "月度销售额"
x-axis [1月, 2月, 3月, 4月, 5月, 6月]
y-axis "销售额(元)" 0 --> 12000
bar [5000, 6000, 7500, 8200, 9500, 10500]
高级功能
组合图表
Mermaid.js支持在同一图表中组合柱状图和折线图,便于数据对比分析:
xychart-beta
title "销售额与利润对比"
x-axis [1月, 2月, 3月, 4月, 5月, 6月]
y-axis "金额(元)" 0 --> 15000
bar "销售额" [5000, 6000, 7500, 8200, 9500, 10500]
line "利润" [1500, 1800, 2250, 2460, 2850, 3150]
水平柱状图
通过添加horizontal关键字可以创建水平方向的柱状图:
xychart-beta horizontal
title "各部门预算"
x-axis "预算金额(万元)" 0 --> 100
y-axis 部门 [研发部, 市场部, 销售部, 人力资源部, 财务部]
bar [65, 25, 45, 15, 10]
多系列柱状图
支持在同一图表中展示多个数据系列,便于比较分析:
xychart-beta
title "2022-2023年季度销售额对比"
x-axis [Q1, Q2, Q3, Q4]
y-axis "销售额(万元)" 0 --> 800
bar "2022年" [450, 520, 680, 720]
bar "2023年" [580, 650, 780, 820]
样式自定义
Mermaid.js提供了丰富的样式自定义选项,可以通过配置参数调整图表的外观。
基本样式配置
---
config:
xyChart:
width: 800
height: 500
titleFontSize: 20
xAxis:
labelFontSize: 14
titleFontSize: 16
yAxis:
labelFontSize: 14
titleFontSize: 16
---
xychart-beta
title "年度销售趋势"
x-axis 月份 [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
y-axis "销售额(元)" 0 --> 12000
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
主题变量配置
通过主题变量可以更精细地控制图表样式:
---
config:
themeVariables:
xyChart:
titleColor: "#ff0000"
backgroundColor: "#f0f8ff"
plotColorPalette: "#008000, #faba63, #4682b4"
---
xychart-beta
title "自定义样式的柱状图"
x-axis [A产品, B产品, C产品, D产品]
y-axis "销量" 0 --> 100
bar [65, 45, 80, 30]
bar [35, 75, 40, 60]
主题配置参考:docs/config/theming.md
实际应用示例
销售业绩分析
xychart-beta
title "各地区销售业绩"
x-axis [华东, 华南, 华北, 西南, 西北, 东北, 中部]
y-axis "销售额(万元)" 0 --> 800
bar "2022年" [650, 590, 800, 450, 490, 380, 420]
bar "2023年" [720, 680, 850, 520, 550, 420, 480]
用户增长趋势
xychart-beta
title "月度活跃用户增长"
x-axis [1月, 2月, 3月, 4月, 5月, 6月]
y-axis "用户数(千人)" 0 --> 120
bar "新增用户" [25, 32, 41, 38, 52, 65]
line "总活跃用户" [80, 105, 130, 155, 180, 210]
柱状图演示页面:demos/xychart.html
饼图与柱状图的选择指南
在实际应用中,选择饼图还是柱状图需要根据数据特点和展示目的来决定:
适合使用饼图的场景
- 展示各部分占总体的比例关系
- 数据类别不超过6个(过多会导致图表难以阅读)
- 需要突出显示某个占比较大的部分
- 不需要精确比较不同类别数值
适合使用柱状图的场景
- 比较不同类别之间的具体数值
- 数据类别较多
- 需要展示数据随时间的变化趋势
- 需要比较多个数据系列
- 需要展示负值数据
数据可视化最佳实践
- 保持简洁:避免过度装饰,让数据成为焦点
- 明确标注:确保坐标轴、数据系列有清晰的标签
- 一致比例:保持数值比例一致,避免误导性展示
- 适当排序:对数据进行合理排序,提升可读性
- 颜色搭配:选择合适的颜色方案,确保可访问性
快速上手指南
引入Mermaid.js
在HTML页面中引入Mermaid.js非常简单,推荐使用国内CDN以确保访问速度:
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
基本初始化
<script>
mermaid.initialize({
theme: 'default',
logLevel: 3,
securityLevel: 'loose'
});
</script>
详细安装指南:docs/intro/getting-started.md
完整示例代码
<!DOCTYPE html>
<html>
<head>
<title>Mermaid数据可视化示例</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
<script>
mermaid.initialize({ theme: 'forest' });
</script>
</head>
<body>
<h1>销售数据可视化</h1>
<h2>产品类别占比</h2>
<pre class="mermaid">
pie showData
title 产品类别销售占比
"电子产品" : 45
"服装鞋帽" : 25
"家居用品" : 15
"食品饮料" : 15
</pre>
<h2>月度销售趋势</h2>
<pre class="mermaid">
xychart-beta
title 月度销售额
x-axis [1月, 2月, 3月, 4月, 5月, 6月]
y-axis "销售额(万元)" 0 --> 120
bar [55, 62, 78, 85, 92, 105]
</pre>
</body>
</html>
总结与展望
Mermaid.js提供了强大而简洁的数据可视化能力,通过简单的文本描述就能创建专业的饼图和柱状图,极大降低了数据可视化的门槛。无论是在技术文档、博客文章还是演示报告中,Mermaid.js都能帮助你快速有效地展示数据。
随着Mermaid.js的不断发展,其数据可视化功能也在持续增强。未来我们可以期待更多图表类型的支持和更丰富的交互功能,让数据可视化变得更加简单和高效。
社区贡献指南:CONTRIBUTING.md
通过本文的介绍,相信你已经掌握了Mermaid.js饼图和柱状图的基本使用方法。现在就开始尝试用Mermaid.js来可视化你的数据吧!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00