File size: 4,349 Bytes
1569336
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# 图表模板实现引擎 (chart_engine)

图表模板实现引擎(`chart_engine`)是 ChartPipeline 框架的第七个处理环节,负责基于前面模块的输出,生成图表的 SVG 表示。

## 功能简介

本模块将前序模块提供的图表类型、数据洞察、布局、配色和图像资源等配置信息转换为可视化图表。核心功能包括:

- 支持多种渲染引擎:ECharts (Python/JavaScript) 和 D3.js
- 提供统一的SVG输出格式
- 基于模板系统实现多种图表类型
- 支持递归扫描的模板目录,可以轻松添加新图表类型

## 输入与输出

### 输入

模块接收完整的JSON数据对象,包含所有前述模块的输出:

- `data`: 原始数据和结构信息
- `chart_type`: 图表类型推荐
- `datafacts`: 数据洞察
- `layout`: 布局和变体配置(这里不需要考虑布局,专注于绘制chart)
- `colors`: 配色方案
- `images`: 图像和图标资源

### 输出

模块输出一个包含图表 SVG 的 JSON 字段:

```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
```

### 支持的模板类型

1. **echarts_python模板**
   - `.py`文件,实现`make_options(json_data)`函数
   - 返回ECharts配置对象

2. **ECharts-JavaScript模板**
   - `.js`文件,实现`makeOption(jsonData)`函数
   - 返回ECharts配置对象

3. **D3.js模板**
   - `.js`文件,实现`makeChart(containerSelector, jsonData)`函数

### 模板注册过程

- 模板放入对应目录后自动注册,无需手动配置
- 系统启动时自动递归扫描模板目录及其子目录
- 基于REQUIREMENTS_BEGIN/END块解析模板元数据
- 根据chart_type和引擎类型进行模板匹配

## 使用与测试

### 命令行使用

```bash
cd modules/chart_engine
python make_svg.py
```

默认情况下,程序会:
1. 读取`input.json`文件作为输入数据
2. 根据数据确定图表类型
3. 查找最匹配的图表模板
4. 生成SVG并保存到`tmp/`目录

### 测试自定义模板

1. 准备测试数据:
   - 修改`input.json`包含所需数据和图表类型

2. 创建新模板:
   - 在适当的模板目录创建文件(如`echarts_py/my_chart.py`)
   - 添加REQUIREMENTS_BEGIN/END声明
   - 实现必要的函数(如`make_options`)

3. 运行测试:
   ```bash
   python make_svg.py
   ```

4. 检查结果:
   - 查看生成的SVG文件(位于`tmp/`目录)
   - 检查日志输出以确认使用了正确的模板

### 调试

设置环境变量开启调试信息:

```bash
export DEBUG=True
python make_svg.py
```

## 使用示例

### 命令行调用

```bash
python -m modules.chart_engine.chart_engine --input input_data.json --output chart.svg
```

### 程序调用

```python
from modules.chart_engine.chart_engine import process

success = process(input='input_data.json', output='chart.svg')
if success:
    print("图表生成完成")
else:
    print("图表生成失败")
```

## 扩展指南

创建新的图表模板:

1. 选择合适的模板引擎(echarts_py、echarts-js或d3-js)
2. 在对应目录创建新文件,添加REQUIREMENTS_BEGIN/END声明
3. 实现必要的函数(如`make_options`)
4. 将模板放入正确目录后,系统会自动扫描并注册
5. 无需任何额外配置或手动注册步骤