ECharts
Build ECharts artifacts that are easy to preview, revise, export, and share in OpenClaw workspaces. Prefer saving actual files over leaving the chart design only in chat.
Workflow
- 1. If the user already has an ECharts option object, refine it and run
page. - If the user has structured data in CSV, TSV, or JSON, run
table. - If the user only has a small inline list, run
sample. - If the user needs a static image, either add
--export-image png|svg during build or run node {baseDir}/scripts/render-image.mjs --input <artifact-dir> --type png|svg afterward.
INLINECODE5 can be used anywhere below where node appears.
Quick Start
Quick line or bar chart from inline data:
CODEBLOCK0
Generate a chart from a CSV, TSV, or JSON table:
CODEBLOCK1
Build and export a PNG in one step:
CODEBLOCK2
Build and export both PNG and SVG in one run:
CODEBLOCK3
Package an existing option file into a standalone preview page:
CODEBLOCK4
Lint an option file before handing it off:
CODEBLOCK5
Export a static image from a generated artifact directory:
CODEBLOCK6
中文示例
销售趋势折线图:
CODEBLOCK7
值班热力图:
CODEBLOCK8
渠道转化桑基图:
CODEBLOCK9
股票 K 线:
CODEBLOCK10
团队协作关系图:
CODEBLOCK11
多指标平行坐标:
CODEBLOCK12
日历热力图:
CODEBLOCK13
时间流带图:
CODEBLOCK14
瀑布变化图:
CODEBLOCK15
南北区极坐标柱状图:
CODEBLOCK16
玫瑰饼图:
CODEBLOCK17
Artifacts
The builder writes a stable file set:
- -
chart.spec.json: normalized build request and mappings - INLINECODE8 : ECharts config kept as the source of truth
- INLINECODE9 : normalized input rows when source data was provided
- INLINECODE10 : standalone preview and export page
- INLINECODE11 : small index of generated files and settings
- optional exported image such as
<fileBase>.png or INLINECODE13
Keep chart.option.json even when the user only asked for a preview page. It is the easiest artifact to diff, review, and reuse later. Static image exports can be created on demand with scripts/render-image.mjs or directly during build with one or more --export-image flags, and default to <fileBase>.png or <fileBase>.svg inside the artifact directory. manifest.json keeps single-image compatibility in files.image, and records multi-format exports in files.images.
Input Modes
sample
Best for quick drafts from short lists.
- -
bar, line, area, polarBar: use --categories plus one or more INLINECODE28 - INLINECODE29 : use
--categories plus one or more INLINECODE31 - INLINECODE32 : use
--labels plus INLINECODE34 - INLINECODE35 : use
--labels plus INLINECODE37 - INLINECODE38 : use
--labels plus INLINECODE40 - INLINECODE41 : use
--values, optional --labels, optional --maxes or shared INLINECODE45 - INLINECODE46 : use
--x-categories, --y-categories, and INLINECODE49 - INLINECODE50 : use
--categories and INLINECODE52 - INLINECODE53 : use
--dates and INLINECODE55 - INLINECODE56 : use
--dates plus one or more INLINECODE58 - INLINECODE59 : use
--categories and INLINECODE61 - INLINECODE62 : use
--categories and INLINECODE64 - INLINECODE65 : use repeated
--link Source>Target:Value or a single --links list - INLINECODE68 : use repeated
--link Source>Target:Value, with optional repeated INLINECODE70 - INLINECODE71 : use
--labels, --values, and optional INLINECODE74 - INLINECODE75 : use
--dimensions MetricA,MetricB,... plus one or more INLINECODE77 - INLINECODE78 : use
--indicators plus one or more INLINECODE80 - INLINECODE81 : use
--labels, --values, and optional INLINECODE84 - INLINECODE85 : use
--labels, --values, and optional INLINECODE88
table
Best for real data files.
- -
bar, line, area, polarBar: --x <field> and INLINECODE95 - INLINECODE96 :
--x <field> and INLINECODE98 - INLINECODE99 :
--label <field> and INLINECODE101 - INLINECODE102 :
--label <field> and INLINECODE104 - INLINECODE105 :
--label <field> and INLINECODE107 - INLINECODE108 :
--value <field> plus optional --label, --max-field, or shared INLINECODE112 - INLINECODE113 : INLINECODE114
- INLINECODE115 : INLINECODE116
- INLINECODE117 : INLINECODE118
- INLINECODE119 : INLINECODE120
- INLINECODE121 : INLINECODE122
- INLINECODE123 : INLINECODE124
- INLINECODE125 : INLINECODE126
- INLINECODE127 :
--source <field> --target <field> plus optional --value, --source-group, --target-group, --source-size, INLINECODE133 - INLINECODE134 :
--label <field> --value <field> plus optional INLINECODE136 - INLINECODE137 : INLINECODE138
- INLINECODE139 :
--x <field> --y <field> plus optional --series-field, --size-field, INLINECODE143 - INLINECODE144 : INLINECODE145
- INLINECODE146 :
--label <field> --value <field> plus optional INLINECODE148 - INLINECODE149 :
--label <field> --value <field> plus optional INLINECODE151
page
Best when the option already exists and only needs a polished preview or export wrapper.
- - Accepts JSON option files
- Preserves the option as JSON and wraps it in the standalone HTML template
- Use
--renderer svg when the final deliverable should stay vector-friendly
Export Guidance
- - Use
--renderer svg for vector exports, design reviews, and docs-friendly embeds. - Use
--renderer canvas for crisp PNG output and heavier charts. - Use
--export-image png or --export-image svg during build.mjs for one-step image output. - Repeat
--export-image to export multiple formats in one run, for example --export-image png --export-image svg. - Use
node {baseDir}/scripts/render-image.mjs --input ./artifacts/chart-name --type png for direct PNG export. - Use
node {baseDir}/scripts/render-image.mjs --input ./artifacts/chart-name --type svg for direct SVG export from SVG-rendered pages. - INLINECODE163 requires
--renderer svg. - When exporting multiple formats,
--image-out must point to a directory or a path without an extension. - INLINECODE166 auto-detects Chrome or Edge. If detection fails, pass
--browser-executable <path> or set ECHARTS_BROWSER_PATH. - INLINECODE169 still includes buttons for PNG download, SVG download when SVG renderer is active, JSON download, and clipboard copy.
- The generated page first tries the configured CDN and then common public mirrors. If the environment is fully offline, rerun with
--cdn <url> pointing to a local or mirrored bundle.
Authoring Rules
- - Choose the simplest chart that answers the question. Do not default to dashboards when one chart is enough.
- Keep units in titles, axis names, or notes when the metric is ambiguous.
- Use
references/chart-selection.md when deciding between bars, pictorial bars, polar bars, lines, pies, rose pies, scatters, heatmaps, calendars, theme rivers, waterfalls, funnels, gauges, treemaps, sunbursts, candlesticks, boxplots, sankeys, graphs, trees, parallels, and radar charts. - Use
references/option-patterns.md for JSON-safe option patterns such as data zoom, stacked series, donut layout, and mark lines. - Prefer JSON-safe config over formatter functions when possible. If function-based formatting is unavoidable, treat
chart.option.json as the base and edit chart.html intentionally afterward.
OpenClaw And ClawHub Norms
- - Write artifacts inside the current workspace, not into home-directory scratch paths.
- Keep examples, templates, and published artifacts generic. Sanitize client data before sharing anything on ClawHub.
- Do not hide key logic in chat-only prose. Save the option, page, and normalized data as files.
- Keep the skill reusable: data samples should be fake or clearly synthetic, and commands should use
{baseDir} instead of machine-specific paths.
References
- - Read
references/chart-selection.md for chart choice and data-shape guidance. - Read
references/option-patterns.md for advanced JSON-safe option patterns and cleanup rules.
ECharts
在 OpenClaw 工作空间中构建易于预览、修改、导出和分享的 ECharts 产物。优先保存实际文件,而非仅将图表设计留在对话中。
工作流程
- 1. 如果用户已有 ECharts 配置对象,优化它并运行 page。
- 如果用户有 CSV、TSV 或 JSON 格式的结构化数据,运行 table。
- 如果用户只有少量内联数据,运行 sample。
- 如果用户需要静态图片,可以在构建时添加 --export-image png|svg,或者之后运行 node {baseDir}/scripts/render-image.mjs --input --type png|svg。
以下所有出现 node 的地方都可以使用 bun 替代。
快速开始
从内联数据快速生成折线图或柱状图:
bash
node {baseDir}/scripts/build.mjs sample --chart line --categories Jan,Feb,Mar,Apr --series Revenue:120,160,210,260 --series Profit:24,30,42,51 --title Revenue and Profit --subtitle Sample series --out ./artifacts/revenue-profit
从 CSV、TSV 或 JSON 表格生成图表:
bash
node {baseDir}/scripts/build.mjs table --input ./data/sales.csv --chart bar --x month --y revenue,profit --title Monthly sales --page-mode report --out ./artifacts/monthly-sales
一步构建并导出 PNG:
bash
node {baseDir}/scripts/build.mjs sample --chart line --categories Jan,Feb,Mar,Apr --series Revenue:120,160,210,260 --title Quarterly trend --renderer svg --export-image png --out ./artifacts/quarterly-trend
一次运行同时导出 PNG 和 SVG:
bash
node {baseDir}/scripts/build.mjs sample --chart line --categories Jan,Feb,Mar,Apr --series Revenue:120,160,210,260 --title Quarterly trend --renderer svg --export-image png --export-image svg --out ./artifacts/quarterly-trend-both
将现有配置文件打包成独立预览页面:
bash
node {baseDir}/scripts/build.mjs page --option ./option.json --renderer svg --theme paper --title Release dashboard --out ./artifacts/release-dashboard
在交付前检查配置文件:
bash
node {baseDir}/scripts/lint-option.mjs ./artifacts/release-dashboard/chart.option.json
从生成的产物目录导出静态图片:
bash
node {baseDir}/scripts/render-image.mjs --input ./artifacts/monthly-sales --type png
node {baseDir}/scripts/render-image.mjs --input ./artifacts/release-dashboard --type svg
中文示例
销售趋势折线图:
bash
node {baseDir}/scripts/build.mjs sample --chart line --categories 1月,2月,3月,4月 --series 销售额:120,168,210,256 --series 毛利:32,45,58,73 --title 月度销售趋势 --subtitle 示例数据 --out ./artifacts/zh-sales-line
值班热力图:
bash
node {baseDir}/scripts/build.mjs sample --chart heatmap --x-categories 周一,周二,周三,周四,周五 --y-categories 上午,下午,晚上 --matrix 4,6,7,5,3;7,8,9,6,5;3,4,6,5,4 --title 客服值班热力图 --out ./artifacts/zh-heatmap
渠道转化桑基图:
bash
node {baseDir}/scripts/build.mjs sample --chart sankey --link 广告>注册:380 --link 自然流量>注册:240 --link 注册>激活:410 --link 激活>付费:126 --title 渠道转化流向 --out ./artifacts/zh-sankey
股票 K 线:
bash
node {baseDir}/scripts/build.mjs sample --chart candlestick --categories 周一,周二,周三,周四 --ohlc 12,15,11,16;15,14,13,17;14,18,13,19;18,17,16,20 --title 示例 K 线 --out ./artifacts/zh-candlestick
团队协作关系图:
bash
node {baseDir}/scripts/build.mjs sample --chart graph --link 产品>设计:8 --link 产品>前端:12 --link 前端>后端:10 --link 后端>运维:6 --node 产品:30:业务 --node 设计:24:设计 --node 前端:28:研发 --node 后端:28:研发 --node 运维:22:平台 --title 团队协作网络 --out ./artifacts/zh-graph
多指标平行坐标:
bash
node {baseDir}/scripts/build.mjs sample --chart parallel --dimensions 响应时间,稳定性,成本,易用性 --series 方案A:88,93,52,74 --series 方案B:72,85,66,91 --series 方案C:64,90,80,69 --title 方案对比 --out ./artifacts/zh-parallel
日历热力图:
bash
node {baseDir}/scripts/build.mjs sample --chart calendar --dates 2026-03-01,2026-03-02,2026-03-03,2026-03-04,2026-03-05,2026-03-06,2026-03-07 --values 12,18,9,20,16,24,14 --title 周活跃日历 --out ./artifacts/zh-calendar
时间流带图:
bash
node {baseDir}/scripts/build.mjs sample --chart themeRiver --dates 2026-03-01,2026-03-02,2026-03-03,2026-03-04 --series 广告:120,140,130,150 --series 自然流量:90,105,115,118 --series 转介绍:30,42,40,46 --title 渠道流量流带图 --out ./artifacts/zh-theme-river
瀑布变化图:
bash
node {baseDir}/scripts/build.mjs sample --chart waterfall --categories 新签,退款,扩容,流失 --values 120,-30,45,-10 --title 净变化瀑布图 --out ./artifacts/zh-waterfall
南北区极坐标柱状图:
bash
node {baseDir}/scripts/build.mjs sample --chart polarBar --categories 华北,华东,华南,西南 --series 营收:120,98,140,110 --title 区域营收极坐标图 --out ./artifacts/zh-polar-bar
玫瑰饼图:
bash
node {baseDir}/scripts/build.mjs sample --chart rosePie --labels 搜索,直接访问,社交,邮件 --values 420,310,180,90 --title 渠道结构玫瑰图 --out ./artifacts/zh-rose-pie
产物
构建器生成稳定的文件集:
- - chart.spec.json:标准化的构建请求和映射
- chart.option.json:作为真实数据源的 ECharts 配置
- chart.data.json:提供源数据时的标准化输入行
- chart.html:独立预览和导出页面
- manifest.json:生成文件和设置的小型索引
- 可选的导出图片,如 .png 或 .svg
即使用户只要求预览页面,也要保留 chart.option.json。它是日后最容易进行差异比较、审查和复用的产物。静态图片导出可以使用 scripts/render-image.mjs 按需创建,也可以在构建时通过一个或多个 --export-image 标志直接创建,默认保存在产物目录中的 .png 或 .svg。manifest.json 在 files.image 中保持单图片兼容性,并在 files.images 中记录多格式导出。
输入模式
sample
最适合从短列表快速生成草稿。
- - bar、line、area、polarBar:使用 --categories 加上一个或多个 --series Name:1,2,3
- pictorialBar:使用 --categories 加上一个或多个 --series Name:1,2,3
- pie:使用 --labels 加上 --values
- rosePie:使用 --labels 加上 --values
- funnel:使用 --labels 加上 --values
- gauge:使用 --values,可选的 --