Spaces:
Sleeping
Sleeping
图表模板实现引擎 (chart_engine)
图表模板实现引擎(chart_engine)是 ChartPipeline 框架的第七个处理环节,负责基于前面模块的输出,生成图表的 SVG 表示。
功能简介
本模块将前序模块提供的图表类型、数据洞察、布局、配色和图像资源等配置信息转换为可视化图表。核心功能包括:
- 支持多种渲染引擎:ECharts (Python/JavaScript) 和 D3.js
- 提供统一的SVG输出格式
- 基于模板系统实现多种图表类型
- 支持递归扫描的模板目录,可以轻松添加新图表类型
输入与输出
输入
模块接收完整的JSON数据对象,包含所有前述模块的输出:
data: 原始数据和结构信息chart_type: 图表类型推荐datafacts: 数据洞察layout: 布局和变体配置(这里不需要考虑布局,专注于绘制chart)colors: 配色方案images: 图像和图标资源
输出
模块输出一个包含图表 SVG 的 JSON 字段:
{
"chart_svg": "<svg width=\"800\" height=\"500\" xmlns=\"http://www.w3.org/2000/svg\">...</svg>"
}
SVG 输出包含完整的图表可视化,包括:
- 数据标记和系列
- 坐标轴和网格线
- 图例和标签
- 交互元素(如提示框)
- 注释和高亮
模板系统
目录结构
modules/chart_engine/
├── template/
│ ├── echarts_py/ # Python生成的ECharts配置模板
│ ├── echarts-js/ # ECharts JavaScript模板
│ └── d3-js/ # D3.js模板
模板要求格式
每个模板文件必须包含一个特定格式的要求声明:
REQUIREMENTS_BEGIN
{
"chart_type": "图表类型名称", # 必需:用于模板匹配
"chart_name": "图表标识符", # 可选:唯一标识符
"required_fields": ["x", "y", ...], # 可选:必需的数据字段
"required_fields_type": ["string", "number", ...], # 可选:字段类型
"width": [500, 1000], # 可选:宽度范围
"height": [300, 600] # 可选:高度范围
}
REQUIREMENTS_END
支持的模板类型
echarts_python模板
.py文件,实现make_options(json_data)函数- 返回ECharts配置对象
ECharts-JavaScript模板
.js文件,实现makeOption(jsonData)函数- 返回ECharts配置对象
D3.js模板
.js文件,实现makeChart(containerSelector, jsonData)函数
模板注册过程
- 模板放入对应目录后自动注册,无需手动配置
- 系统启动时自动递归扫描模板目录及其子目录
- 基于REQUIREMENTS_BEGIN/END块解析模板元数据
- 根据chart_type和引擎类型进行模板匹配
使用与测试
命令行使用
cd modules/chart_engine
python make_svg.py
默认情况下,程序会:
- 读取
input.json文件作为输入数据 - 根据数据确定图表类型
- 查找最匹配的图表模板
- 生成SVG并保存到
tmp/目录
测试自定义模板
准备测试数据:
- 修改
input.json包含所需数据和图表类型
- 修改
创建新模板:
- 在适当的模板目录创建文件(如
echarts_py/my_chart.py) - 添加REQUIREMENTS_BEGIN/END声明
- 实现必要的函数(如
make_options)
- 在适当的模板目录创建文件(如
运行测试:
python make_svg.py检查结果:
- 查看生成的SVG文件(位于
tmp/目录) - 检查日志输出以确认使用了正确的模板
- 查看生成的SVG文件(位于
调试
设置环境变量开启调试信息:
export DEBUG=True
python make_svg.py
使用示例
命令行调用
python -m modules.chart_engine.chart_engine --input input_data.json --output chart.svg
程序调用
from modules.chart_engine.chart_engine import process
success = process(input='input_data.json', output='chart.svg')
if success:
print("图表生成完成")
else:
print("图表生成失败")
扩展指南
创建新的图表模板:
- 选择合适的模板引擎(echarts_py、echarts-js或d3-js)
- 在对应目录创建新文件,添加REQUIREMENTS_BEGIN/END声明
- 实现必要的函数(如
make_options) - 将模板放入正确目录后,系统会自动扫描并注册
- 无需任何额外配置或手动注册步骤