通用图表生成(Universal Charts)
把表格数据一键变成可交互的 ECharts 图表。数据进、HTML 出,双击即看,可存图。 支持 8 类图表:折线 / 面积 / 柱状 / 横向柱状 / 堆叠柱状 / 饼图 / 环形图 / 散点图。 图表类型明细、列选择规则、报错排查见 references/图表类型指南.md。
30 秒速查(先看这个)
最小可用命令(柱状图,自动识别数值列):
python {skill_base}/scripts/chart_generator.py 数据.csv --x 月份 --y 营收 --title "月度营收" --out 营收图.html
{skill_base}= 本 skill 根目录(含 SKILL.md)。--type指定图表类型;不指定且不加--auto时默认按数据形态自动选(见下方「自动选型」)。--y多个数值列用逗号分隔:--y 营收,利润→ 多条系列。- 输出为独立 HTML,ECharts 已内联,离线可用,不发任何网络请求。
黄金示例 1:多系列折线(趋势对比)
python {skill_base}/scripts/chart_generator.py 数据.csv --type line \
--x 月份 --y 营收,利润 --title "月度营收与利润趋势" --out 趋势.html
黄金示例 2:饼图(占比构成)
python {skill_base}/scripts/chart_generator.py 数据.csv --type pie \
--x 类别 --y 占比 --title "品类占比" --out 占比.html
黄金示例 3:散点(相关性)
python {skill_base}/scripts/chart_generator.py 数据.csv --type scatter \
--x 身高 --y 体重 --title "身高体重相关" --out 相关.html
黄金示例 4:堆叠柱状
python {skill_base}/scripts/chart_generator.py 数据.csv --type stacked_bar \
--x 季度 --y 产品A,产品B,产品C --title "分产品季度堆叠" --out 堆叠.html
触发条件(Activation Triggers)
满足以下任一即加载本技能:
- 用户提到:「分析数据」「做图表」「数据可视化」「画个图」「把表格变成图」「生成报表图」
- 用户提供了一个表格文件(CSV / JSON / xlsx)并要求可视化
- 用户要从表格数据产出可展示的图
硬约束(MUST follow)
- 必须走 CLI:用
chart_generator.py生成,不要手写 HTML 或自己拼 ECharts 配置。 - 列名必须真实存在:
--x/--y的列名必须出现在数据里;不存在会返回结构化错误,按提示改列名重试。 - 中文编码自动回退:CSV 默认按 utf-8-sig → gbk → utf-8 顺序尝试,一般无需指定编码。
- 数值自动清洗:千分位逗号、
%、空值、-会自动处理为数值或忽略,无需预处理。 - 零网络:生成过程不联网;输出的 HTML 内联了 ECharts,断网也能看。
- 只增不改:技能只生成新 HTML 文件,不修改/删除用户的源数据。
自动选型(--auto 或省略 --type 时)
按数据形态推断(无需用户指定类型):
- 数值列 ≥ 2 →
line(多系列折线,适合对比趋势) - 数值列 = 1 且有类别列 →
bar(单系列柱状) - 其余兜底 →
bar
想精确控制就显式
--type,自动选型只是省事兜底。
执行流程(Execution Workflow)
- 拿数据:用户上传文件,或给本地路径。
- 定类型:用户指定
--type则用之;否则--auto按形态选;实在不确定就默认bar。 - 定轴:
- 轴类图(line/area/bar/hbar/stacked_bar):
--x类别列,--y数值列(可多个)。 - 饼图/环形:
--x名称列,--y数值列(取第一个)。 - 散点:
--x/--y均为数值列。
- 轴类图(line/area/bar/hbar/stacked_bar):
- 生成:调
chart_generator.py→ 输出 HTML。 - 呈现:把生成的 HTML 路径告诉用户,提示双击浏览器打开;需要图片就用图表右上角「保存图片」。
图表类型一览
| 类型值 | 适合 | X 轴 | Y 轴 | 说明 |
|--------|------|------|------|------|
| line | 趋势/变化 | 类别或时间 | 1~N 数值 | 多系列自动分色 |
| area | 累计/变化(带填充) | 类别或时间 | 1~N 数值 | 在 line 基础上加面积填充 |
| bar | 类别对比/排名 | 类别 | 1~N 数值 | 最常用 |
| hbar | 类别多、名称长 | 类别(纵轴) | 1~N 数值 | 横向柱状,适合长标签 |
| stacked_bar | 构成堆叠 | 类别 | 1~N 数值 | 同 stack 堆叠求和 |
| pie | 占比/构成 | 名称列 | 1 数值 | 显示百分比 |
| doughnut | 占比(环形) | 名称列 | 1 数值 | 环形饼图 |
| scatter | 两变量相关 | 数值 | 数值 | 散点分布 |
完整列选择规则、常见报错与排查见 references/图表类型指南.md。
退出与校验(Exit Criteria)
- ✅ 成功:stdout 输出
{"success": true, "html_path": "...", "chart_type": "...", "rows": N},且html_path文件存在非空 → 把路径给用户。 - ❌ 失败:stdout 输出
{"success": false, "error": "..."}→ 读error修正(常见:列名不存在、文件不存在、类型不支持),最多重试 2 次。 - 🛑 仍失败:把
error如实告诉用户并给建议(如 xlsx 缺 openpyxl 就提示安装),不要静默绕过。
能力边界(Capability Boundaries)
- 支持:CSV(逗号分隔,utf-8/gbk 自动)、JSON(对象数组,或
{categories, series}形态)、xlsx(需 openpyxl);8 类图表;多系列;中文标签。 - 不支持:数据库(先导出 CSV)、实时流数据、地理地图、图片/音频等非表格数据。
- 网络:无。ECharts 随包内联,输出 HTML 完全离线可用。
- 安全:只读输入、只写输出 HTML,不上传任何数据,不联网。
通用原则
- 自然口语,像跟朋友聊;少问多产,先出图再按需调整。
- 一次生成不满意,告诉我要换类型 / 换轴 / 换标题,我直接重跑。
- 图表右上角「保存图片」可导出 PNG,方便贴进报告或文档。
Scan to join WeChat group