| name | chartm3-synthesis |
| description | 生成图表可视化及其问答对数据,用于训练视觉语言模型的图表理解能力。支持63种图表类型,自动执行 Topic生成→数据生成→可视化生成→质量评估→QA生成 的完整流程。当用户需要生成图表训练数据、合成图表QA数据、或使用 /chartm3 命令时触发。 |
ChartM3 图表 QA 数据合成
技能描述
ChartM3 是一个图表问答数据合成工具,能够自动生成高质量的图表可视化及其对应的问答对,用于训练视觉语言模型的图表理解能力。
触发方式
1. 自然语言输入(推荐)
用户以自然语言描述需求,系统自动分析入口和生成阶段:
帮我生成一个关于金融领域的K线图
生成一个教育领域的折线图,只需要到数据阶段
用这个数据文件生成一个柱状图
2. 显式命令格式
/chartm3 领域=<领域名> 图表=<图表类型> [生成到=topic|数据|图表|QA]
/chartm3 topic="<主题描述>" [生成到=...]
/chartm3 数据=<数据文件路径> [生成到=...]
入口模式识别
根据用户输入自动识别入口模式:
| 入口模式 | 识别条件 | 起始阶段 |
|---|
| 领域+图表类型 | 用户指定了领域和图表类型 | Topic生成 |
| Topic描述 | 用户给出了具体的主题描述 | 数据生成 |
| 数据文件 | 用户提供了数据文件路径 | 图表类型推荐 → 可视化生成 |
生成流程
┌─────────────────────────────────────────────────────────────────┐
│ 入口1: 领域+图表类型 │
│ ↓ │
│ [Step 1] Topic 生成 ──→ 生成数据主题和背景故事 │
│ ↓ │
├─────────────────────────────────────────────────────────────────┤
│ 入口2: Topic描述 │
│ ↓ │
│ [Step 2] 数据生成 ──→ 生成 Python 代码创建 CSV 数据 │
│ ↓ └──→ 执行代码 ──→ 失败则自动纠错(最多5次) │
│ ↓ │
├─────────────────────────────────────────────────────────────────┤
│ 入口3: 数据文件 │
│ ↓ │
│ [推荐] 图表类型推荐 ──→ 分析数据特征,推荐合适的图表类型 │
│ ↓ │
│ [Step 3] 可视化生成 │
│ ├──→ 3.1 可视化方案设计(分析数据 + 设计方案) │
│ ├──→ 3.2 可视化代码生成(参考样例 + 生成代码) │
│ └──→ 3.3 执行代码 ──→ 失败则自动纠错(最多5次) │
│ ↓ │
│ [Step 4] 质量评估 ──→ 评估图表质量,低质量则重新生成 │
│ ↓ │
│ [Step 5] QA 生成 │
│ ├──→ visual 任务组(基础识别 + 视觉理解) │
│ ├──→ code_driven 任务组(数据检索 + 分析 + 推理) │
│ └──→ extraction 任务组(数据提取) │
└─────────────────────────────────────────────────────────────────┘
参数说明
领域参数
常用领域示例:金融、教育、医疗、体育、科技、环境、交通、零售、制造、能源等
图表类型
支持 63 种图表类型:
生成阶段
| 阶段 | 说明 | 输出 |
|---|
| topic | 仅生成主题 | topic.json |
| 数据 | 生成到数据 | topic.json + data.csv + data_gen.py |
| 图表 | 生成到可视化 | + plot.png + vis_code.py |
| QA | 完整生成(默认) | + qa.json |
执行流程详解
图表类型推荐(入口3专用)
当用户提供数据文件时,需要先分析数据特征推荐合适的图表类型:
输入: 用户提供的数据文件(CSV/Excel)
输出: 推荐的图表类型列表及理由
执行步骤:
- 读取数据文件,分析数据结构(行数、列数、数据类型)
- 参考
./reference/chart_type.csv 中的 数据特征 字段进行匹配
- 推荐 1-3 种最适合的图表类型,说明选择理由
- 用户确认后进入 Step 3 可视化生成
Step 1: Topic 生成
输入: 领域 + 图表类型
输出: 数据主题、背景故事、数据维度描述
使用 topic_gen.md 模板生成。
Step 2: 数据生成
输入: Topic 描述 + 图表类型
输出: CSV 数据文件 + 生成代码
使用 data_gen.md 模板生成 Python 代码,执行生成数据。
自动纠错机制:
Step 3: 可视化生成
输入: CSV 数据 + 图表类型
输出: plot.png 图表图片 + 可视化代码
分两个阶段:
- 方案设计: 使用 vis_plan.md 分析数据特点,设计可视化方案
- 代码生成: 使用 vis_code.md 参考样例代码生成可视化代码
样例代码模板:
样例代码存储在 ./reference/templates/ 目录下,每种图表类型对应一个 *_multi*.py 文件(共70个):
基础折线图_multi.py - 折线图样例
基础条形图_multi.py - 条形图样例
小提琴图_multi1.py - 小提琴图样例
蜡烛图_multi1.py - K线图样例
- ...等 63 种图表类型
每个样例文件包含:
preprocess(data) 函数:数据预处理
plot(data) 函数:基础绘图
plot_1 ~ plot_5:不同风格变体
代码执行:
Step 4: 质量评估
输入: 图表图片
输出: 质量评分 + 问题诊断
使用 quality_eval.md 评估图表质量:
- 可读性(文字是否清晰、是否重叠)
- 美观性(配色、布局、对齐)
- 完整性(标题、图例、坐标轴)
低质量图表将标记并可选择重新生成。
Step 5: QA 生成
输入: 图表图片 + 可视化代码 + 数据
输出: 多条问答对
使用 qa_gen.md 生成多种任务类型的问答对:
| 任务组 | 任务类型 |
|---|
| visual | 类型分类、标题识别、轴标签识别、图表元素计数、轴刻度识别、颜色识别、图例识别 |
| code_driven | 数据查询、最值查询、条件查询、数学计算、比较、排序、相关性分析、异常检测、趋势分析 |
| extraction | Chart to Data(将图表转换为 markdown 表格) |
输出文件结构
output_dir/
└── <图表类型>_<领域>_<序号>/
├── topic.json # 主题信息
├── data.csv # 生成的数据
├── data_gen.py # 数据生成代码
├── vis_plan.json # 可视化方案
├── vis_code.py # 可视化代码
├── plot.png # 图表图片
├── quality.json # 质量评估结果
└── qa.json # 问答对
使用示例
示例 1: 自然语言 - 完整生成
用户: 帮我生成一个关于股票市场的K线图和问答数据
分析:
- 入口模式: 领域+图表类型
- 领域: 金融/股票
- 图表类型: 蜡烛图 (K线图)
- 生成阶段: QA(完整生成)
执行: Step 1 → Step 2 → Step 3 → Step 4 → Step 5
示例 2: 显式命令 - 仅生成到数据
用户: /chartm3 领域=教育 图表=折线图 生成到=数据
执行: Step 1 → Step 2
输出: topic.json + data.csv + data_gen.py
示例 3: 从数据文件生成
用户: 用 sales_data.csv 生成一个可视化图表
分析:
- 入口模式: 数据文件
- 数据文件: sales_data.csv
- 图表类型: 自动推荐
执行: 推荐图表类型 → Step 3 → Step 4 → Step 5
示例 4: 指定 Topic
用户: /chartm3 topic="2020-2024年中国新能源汽车销量趋势"
分析:
- 入口模式: Topic描述
- 图表类型: 需要根据 topic 推荐(折线图/面积图)
执行: 推荐图表类型 → Step 2 → Step 3 → Step 4 → Step 5
代码执行环境
- Python 3.8+
- 必需库: pandas, numpy, matplotlib, plotly
- 可选库: seaborn, scipy
注意事项
-
代码生成规范:
- 只生成
preprocess() 和 plot() 函数,不包含 import 和 main 块
- 图表保存路径固定为
plot.png,禁止自定义路径
- 所有文本使用英文
-
JSON 输出规范:
- JSON 值中不使用英文双引号,使用单引号或其他方式
- 确保 JSON 格式合法可解析
-
matplotlib 样式:
- 使用
seaborn-v0_8-* 系列样式名称
- 注意中文字体配置
-
质量控制:
- 代码执行失败最多重试 5 次
- 低质量图表标记后可重新生成