ECharts
echarts 围栏里用 YAML 或 JSON 写图表选项,Hugo 构建期校验,浏览器用本地 ECharts 画出跟随深浅色的统计图。echarts 围栏的正文是一段 YAML 或 JSON 的 ECharts 选项对象,不是代码。适用于需要坐标轴、序列与图例的定量图表;只表达关系与流程时用 Mermaid,只表达顺序与层级时用 Infographic。Hugo 在构建期解析选项,解析失败则构建失败;浏览器用随主题分发的 ECharts 绘图,只有用到它的页面加载运行时。
最简例子
一个柱状图只需要三段:xAxis、yAxis、series。下面是本站文档六个栏目各有多少页。
两种格式都接受,YAML 不需要引号与逗号,写起来更短。缩进写错、正文解析成数组而不是映射,构建在这一行失败,不会输出一张空白图。
多序列折线
series 是数组,多一项就是多一条线;legend 让读者单独隐藏其中一条。下面是 PostgreSQL 各大版本的发布年份,以及按社区五年支持策略推算的终止年份。
版本号要加引号:YAML 里不带引号的 10 是数字,9.6 也是;作为分类轴的标签它们必须是字符串。
饼图与环形图
radius 给两个值就是环形图。下面是 OINK 的 29 个 shortcode 按用途的构成。
{b} {c} {d} 是 ECharts 的模板占位符(名称 / 数值 / 百分比),写在字符串里即可,不需要函数。
高度与通栏
height 默认 400px,接受 px rem em vh vw %;full=true 去掉正文的宽度限制,让图铺满内容区。适用于数据点多、标签长的图。
无效的高度(360、36pt)会让构建失败,不会退回默认值。
深浅色
不写 theme 时,图按读者当前的配色模式初始化;切换配色时图原地重绘,不刷新页面。容器尺寸变化时自动 resize。把本页切到深色,上面每张图的底色与文字随之改变。
写定 theme 则固定配色,两种模式下都是同一套:
运行时内置的只有 dark;其它 ECharts 主题要先用 echarts.registerTheme() 注册才能在这里引用。没有品牌要求时不写 theme,让图跟随站点配色。
回调:$fn:
围栏是数据,不能带 JavaScript。某个选项需要函数时(提示框格式化、数据驱动的颜色),在选项里写字符串 "$fn:名字",再把这个名字注册到 window.OinkEchartsFunctions:
鼠标悬停在任意一根柱子上,提示框里是该函数拼出的句子。名字未注册时该选项解析为 undefined,图按未设置该项绘制,构建与运行都不报错。脚本与围栏放在同一页的相邻位置,便于一起改动。
这段脚本属于站点代码,按代码审查对待。字符串模板({b} {c} {d})能表达的格式不写成函数。
数据位置
围栏正文是字面量。Hugo 不在其中展开 shortcode、front matter 变量或 data/ 目录里的文件,数字写在围栏里。代价是数据不能共享,收益是图表源码与数据一起进入 Git,diff 能看出改动了哪个数值。
数据经常变动(版本矩阵、发布物清单)时不做成图:改用表格,或发布与下载页中由 data/ 驱动的组件。
输出形态
| 输出 | 呈现 |
|---|---|
| HTML | <div class="td-echarts"> 里一个画布容器加一段 application/json 选项,本地 ECharts 画图 |
| 打印 | 不画图,输出 <pre class="td-echarts-source"> 包着的围栏源码 |
| Markdown | 原样保留 echarts 围栏与选项源码 |
| RSS | 与打印相同,只有源码 |
图上的结论要在正文里写一遍:打印与 RSS 输出里没有图。
参数参考
围栏属性行(```echarts {…}):
style、on* 与其它未知属性都会让构建失败。围栏正文必须能解析成一个 YAML/JSON 映射,解析失败或解析成数组同样失败。选项键本身是 ECharts 的,以官方选项手册为准。
没有站点级参数:ECharts 不需要在 hugo.yml 里开关,用到时才加载。
限制与常见问题
- 围栏里不能写 JavaScript:需要函数时通过
$fn:桥接,未注册的名字解析为undefined,没有报错。 - 围栏不读外部数据:
data/目录、front matter 与 shortcode 都引用不到,数字写在围栏里。 - 打印与 RSS 里只有源码,结论要写进正文。
- YAML 的类型转换:分类轴上的
10、9.6、on、yes会被解析成数字或布尔值,需要引号。 - 颜色不是唯一的区分手段:多序列图同时区分线型或标记形状,两种配色模式下都要检查图例对比度。
相关
- Infographic — 表达结构与顺序的信息图,不是统计图
- 表格 — 数据少、需要精确读数时用表格
- Mermaid — 关系图与流程图
- 代码块 — 围栏属性行的通用规则