Install
openclaw skills install text2echartChart generator skill. When triggered: - Default: CONSTRUCT ECharts option JSON and output HTML string directly and render by mermaid and support preview. - Image / vector (图片/矢量图): use CLI with --svg --embed output. - Screenshot (截图): use CLI with --screenshot output. - Fine-tuning (微调/修改): open browser for interactive adjustment. Supports 6 chart types: bar, line, pie, scatter, radar, wordcloud. Trigger words: chart, graph, visualize, plot, draw, wordcloud, vent draw图表, 画图, 可视化, 图片, 矢量图, html, web, 源码, 页面, 词云.
openclaw skills install text2echartcase when: user asks for a chart / graph / visualization (default):
case when: user asks for an image / picture / vector graphic (图片/矢量图):
node cli.js data.json --svg --embed --svg-output -o chart.svg--svg enables SVG renderer, --embed bundles ECharts lib for offline, --svg-output extracts standalone .svg filecase when: user asks for html / web / source / page (html/web/源码/页面):
node cli.js data.json --svg -o chart.html```html ... ```case when: user asks for a screenshot / snapshot (截图):
node cli.js data.json --screenshot chart.pngcase when: user wants to fine-tune / adjust / modify the chart (微调/修改):
node cli.js data.json --opencase when: user asks to save to file / run locally:
node cli.js data.json -o chart.htmlcase when: user asks for word cloud (词云):
web/text2echarts.html<!DOCTYPE html><html lang="en"><head>...echarts CDN...<style>...</style></head><body><div id="chart"></div><script>...echarts option...</script></body></html>
Generate ECharts SVG charts from JSON/CSV. Two entry points:
Web App: Open web/text2echarts.html in browser for interactive GUI with templates, live preview, theme switching, and PNG/JPG/SVG export.
CLI: node cli.js for scripted/batch generation.
| Scenario | Use text2echart? |
|---|---|
| "Make a bar chart from this CSV" | ✅ Best fit |
| "Visualize my sales data" | ✅ Natural language input works |
| "Compare trends across months" | ✅ Line chart, multi-series |
| "Show market share distribution" | ✅ Pie chart with % labels |
| "I need an interactive chart dashboard" | ⚠️ Open web/text2echarts.html instead |
| "Animate this chart frame by frame" | ❌ ECharts not designed for animation frames |
| "Generate 100 charts in batch" | ✅ Use CLI: for f in *.csv; do node cli.js \$f; done |
| "Real-time streaming data" | ❌ Use ECharts live update API directly |
# Web App — open interactive GUI
open web/text2echarts.html
# CLI — CSV → chart
node cli.js data.csv --open
# CLI — JSON → SVG
node cli.js chart.json -o report.html
| Format | Example | Auto-detected |
|---|---|---|
| CSV | Month,Sales\nJan,1200\nFeb,900 | ✅ yes (comma in first line) |
| JSON | {"series":[{"type":"bar","data":[30,80]}]} | ✅ yes (starts with {) |
| JSON (simple) | {"type":"bar","data":[{"name":"A","value":30}]} | ✅ yes |
| Stdin pipe | cat data.csv | node cli.js - | ✅ use - |
node cli.js <input> [options]
Options:
-o, --out <file> Output file name
--type <type> Chart type for CSV: bar|line|pie|radar
--theme <name> dark|infographic|macarons|roma|shine|vintage
--width / --height Chart dimensions
--svg SVG renderer (default)
--open Open in browser after generation
--embed Embed ECharts lib for offline (~1MB)
--slide 960x540 PPT slide mode
| Type | CSV columns | Auto features |
|---|---|---|
| bar | col1=labels, col2+=values | Rounded corners, top labels |
| line | col1=labels, col2+=values | Smooth curves, area fill |
| pie | col1=name, col2=value | Donut chart, % labels |
| scatter | col1=x, col2=y | Bubble symbols |
| radar | col1=dimension, col2+=values | Polygon shape |
| wordcloud | col1=word, col2=frequency | Diamond shape |
| Theme | Style | Background |
|---|---|---|
| dark | Tech, deep blue | #1a1a2e |
| infographic | Clean report | #f5f5f5 |
| macarons | Soft, business | #f5f5f5 |
| vintage | Nostalgic | #f5f5f5 |
| shine | Bright, vivid | #f5f5f5 |
| roma | Professional | #f5f5f5 |
User: "Chart these monthly sales"
Month,Sales
Jan,1200
Feb,900
Mar,1600
→ CLI auto-detects CSV, generates bar chart with labels, tooltips, rounded corners.
{
"series": [{
"type": "pie",
"radius": ["40%", "70%"],
"data": [
{"value": 48, "name": "Chrome"},
{"value": 22, "name": "Firefox"},
{"value": 18, "name": "Safari"}
],
"label": {"formatter": "{b}\n{d}%"}
}],
"title": {"text": "Market Share"}
}
Date,Revenue,Cost
Jan,1200,800
Feb,1500,900
Mar,1800,1100
node cli.js data.csv --type line --theme dark --open
Input (JSON/CSV)
→ cli.js parses & converts to ECharts option
→ Option JSON injected into HTML template
→ echarts.init(dom, theme, {renderer:"svg"})
→ Output: self-contained .html with CDN references (~800 bytes)
→ --embed flag: inline ECharts lib (~1MB, offline)
--embed for offline)| File | Content |
|---|---|
prompt.md | Prompt engineering guide: core pattern, chain-of-thought, 3 few-shot examples, 16 option references, end-user template |
references/echarts-option-reference.md | Full ECharts option API (EN, from official site) |
references/echarts-option-zh.md | Full ECharts option API (中文) |
references/echarts-wordcloud.md | Wordcloud extension docs |
references/echarts-zh-title.md | title 选项详细说明 |
references/echarts-zh-grid.md | grid 选项详细说明 |
references/echarts-zh-xAxis.md | xAxis 选项详细说明 |
references/echarts-zh-yAxis.md | yAxis 选项详细说明 |
references/echarts-zh-series-bar.md | series.bar 柱状图配置 |
references/echarts-zh-series-line.md | series.line 折线图配置 |
references/echarts-zh-series-pie.md | series.pie 饼图配置 |
references/echarts-zh-series-scatter.md | series.scatter 散点图 |
references/echarts-zh-series-radar.md | series.radar 雷达图 |
references/echarts-zh-tooltip.md | tooltip 提示框配置 |
references/echarts-zh-legend.md | legend 图例配置 |
references/echarts-zh-color.md | color 调色盘 |
references/echarts-zh-label.md | label 数据标签 |
references/echarts-zh-emphasis.md | emphasis 高亮状态 |
references/echarts-zh-smooth.md | smooth 平滑曲线 |
references/echarts-zh-axisLabel.md | axisLabel 坐标轴标签 |
For LLM-based chart generation, see prompt.md — a complete prompt engineering guide with:
For a full GUI experience, open web/text2echarts.html in your browser.
Features: live preview, templates, theme switching, export PNG/JPG/SVG.
web/
├── text2echarts.html # English (default, lang toggle)
├── app.js # Core logic (i18n via JSON)
├── styles.css # Shared styles
├── templates.js # Chart templates (CN/EN)
└── lang/ # JSON language packs
Refer to these when constructing chart configurations. Official docs:
| Option | What it does | Concrete example | Link |
|---|---|---|---|
title | Chart title | {"text":"Sales","left":"center","textStyle":{"fontSize":18}} | → docs |
grid | Chart margins | {"left":"3%","right":"4%","bottom":"10%","containLabel":true} — containLabel prevents axis labels from being clipped | → docs |
xAxis | X axis | {"type":"category","data":["Jan","Feb"],"axisLabel":{"rotate":45}} — type must be category or value | → docs |
yAxis | Y axis | {"type":"value","name":"Units"} — add name for axis label text | → docs |
series.type:'bar' | Bar chart | {"type":"bar","data":[30,80],"itemStyle":{"borderRadius":[4,4,0,0]},"label":{"show":true,"position":"top"}} | → docs |
series.type:'line' | Line chart | {"type":"line","data":[22,25,23],"smooth":true,"areaStyle":{"opacity":0.1},"lineStyle":{"width":3,"shadowBlur":10}} | → docs |
series.type:'pie' | Pie/donut | `{"type":"pie","radius":["40%","70%"],"data":[{"value":48,"name":"A"}],"label":{"formatter":"{b}\ | |
| {d}%"},"emphasis":{"label":{"fontSize":16}}}` | → docs | ||
series.type:'scatter' | Scatter | {"type":"scatter","data":[[160,55],[170,65]],"symbolSize":12} | → docs |
series.type:'radar' | Radar | {"type":"radar","data":[{"value":[90,75],"name":"Score"}]} + radar.indicator | → docs |
tooltip | Hover info | {"trigger":"axis"} for bar/line (axis-level), {"trigger":"item","formatter":"{b}:{c}"} for pie | → docs |
legend | Series names | {"data":["Sales","Profit"],"bottom":"0"} — data must match series name | → docs |
color | Color palette | ["#5470c6","#91cc75","#fac858","#ee6666","#73c0de"] — ECharts default 5-color palette | → docs |
label | Data labels | {"show":true,"position":"top","formatter":"{c}","fontSize":14} — position: top/inside/outside/bottom | → docs |
emphasis | Highlight state | {"label":{"fontSize":16,"fontWeight":"bold"}} — triggered on hover | → docs |
smooth | Curve lines | true for curved line chart, false (default) for polyline | → docs |
itemStyle.borderRadius | Rounded bars | [4,4,0,0] — top-left, top-right, bottom-right, bottom-left | → docs |
axisLabel.rotate | Rotate X labels | 45 degrees — useful when labels overlap (10+ categories) | → docs |
See also: references/echarts-option-reference.md (EN) and references/echarts-option-zh.md (CN)
| Problem | Cause | Fix |
|---|---|---|
| Blank chart | CDN blocked or no internet | Use --embed flag for local libs |
| SVG not rendering | Old browser version | Chrome/Firefox 2020+ required |
| Wordcloud missing | Missing wordcloud extension | Included in --embed mode; CDN auto-loads |
| Chinese garbled | File saved in wrong encoding | Save as UTF-8; --embed embeds correct charset |
| CLI not found | Node.js not installed | Install from nodejs.org |
After generating a chart:
--theme to confirm theme switching