--- title: ChartPipeline emoji: 📊 colorFrom: blue colorTo: green sdk: docker pinned: false --- # ChartPipeline Framework ![ChartPipeline Logo](./assets/logo.png) ## Hugging Face Space This repository includes a Docker-based Hugging Face Space entrypoint in `app.py`. The Space runs a self-contained chart-engine demo that renders SVG charts from bundled D3/ECharts templates and does not require API keys or external resource pools. Local smoke test: ```bash python modules/chart_engine/chart_engine.py \ --input examples/chart_engine_sample.json \ --name donut_plain_chart_01 \ --output /tmp/chartpipeline_sample.svg ``` Full pipeline runs still need a private `config.py`. Start from `config.example.py`, set `OPENAI_API_KEY`/`OPENAI_BASE_URL` and resource path environment variables, then copy it to `config.py` on the target machine. Do not commit or upload a real `config.py`. ## 简介 ChartPipeline 是一个模块化的数据可视化生成框架,将原始数据转换为图表。框架包含九个模块,自动推荐图表类型、提取数据洞察、生成标题、配色方案和视觉元素。 ## 架构 ``` 输入数据 → [1.图表类型推荐] → [2.数据洞察] → [3.标题生成] → [4.布局推荐] → [5.色彩推荐] → [6.图像推荐] → [7.图表生成] → [8.标题样式化] → [9.布局优化] → 最终输出 ``` 模块1-6:通过JSON对象传递数据,每个模块添加特定字段 模块7-8:基于JSON配置生成SVG元素 模块9:合成最终可视化作品 ## 数据格式 ### 输入格式 ```json { "description": "A global restaurant chain analyzes market share in major cities to inform expansion strategy and resource allocation.", "data": { "data": [ { "City": "New York", "Revenue": 8500.0 }, { "City": "Tokyo", "Revenue": 9200.0 }, { "City": "Sao Paulo", "Revenue": 6800.0 } ], "columns": [ { "name": "City", "description": "City where the restaurant is located", "data_type": "categorical", "unit": "" }, { "name": "Revenue", "description": "Annual restaurant industry revenue", "data_type": "numerical", "unit": "$m" } ], "type_combination": "categorical + numerical" }, "metadata": { "title": "Restaurant Industry Revenue: New York vs. Tokyo vs. Sao Paulo", "description": "A global restaurant chain analyzes market share in major cities to inform expansion strategy and resource allocation.", "main_insight": "Tokyo consistently leads in restaurant industry revenue, demonstrating a strong and growing market compared to New York and Sao Paulo." } } ``` ### 处理后格式 ```json { "description": "数据描述", "data": { "data": [...], "columns": [...], "type_combination": "..." }, "metadata": { "title": "...", "description": "...", "main_insight": "..." }, "titles": { "main_title": "主标题", "sub_title": "副标题" }, "secondary_data": [], "variables": { "width": 600, "height": 600, "has_rounded_corners": false, "has_shadow": false, "has_spacing": false, "has_gradient": false, "has_stroke": false }, "typography": { "title": { "font_family": "Arial", "font_size": "28px", "font_weight": 700 }, "description": { "font_family": "Arial", "font_size": "16px", "font_weight": 500 }, "label": { "font_family": "Arial", "font_size": "16px", "font_weight": 500 }, "annotation": { "font_family": "Arial", "font_size": "12px", "font_weight": 400 } }, "processed": true, "datafacts": [ { "type": "value", "subtype": "max", "data_points": [...], "score": 0.92, "annotation": "数据洞察注释", "reason": "洞察理由" } ], "colors": { "field": { "Tokyo": "#9e1214", "New York": "#6381f1" }, "other": { "primary": "#9e1214", "secondary": "#5ea9f6" }, "available_colors": [...], "background_color": "#E2F1F6", "text_color": "#414141" }, "colors_dark": { "field": { "Tokyo": "#fb484a", "New York": "#b5c4fb" }, "other": { "primary": "#fb484a", "secondary": "#abd4fe" }, "available_colors": [...], "background_color": "#203a43", "text_color": "#a38e8e" }, "images": { "other": { "primary": "base64_encoded_image_data" } } } ``` ## 模块详解 ### 1. 图表类型推荐模块 (chart_type_recommender) 分析数据特征并推荐合适的图表类型。 **输入**: 初始数据对象 **输出**: ```json { "chart_type": [ { "type": "vertical_stacked_bar_chart", "confidence": 0.92, "reasoning": "选择堆叠柱状图是因为需要比较不同时间段内两种状态的分布情况,同时展示总量变化趋势" } ] } ``` ### 2. 数据洞察模块 (datafact_generator) 分析数据并提取关键洞察。 **输入**: 包含chart_type的数据对象 **输出**: ```json { "datafacts": [ { "type": "trend", "score": 0.95, "annotation": "紧急状态宣布数量总体呈上升趋势", "reason": "从1976年至2022年,每十年宣布的国家紧急状态总数从1个增长到平均每十年超过15个" } ] } ``` ### 3. 标题生成模块 (title_generator) 基于数据内容和洞察生成标题和副标题。 **输入**: 包含chart_type和datafacts的数据对象 **输出**: ```json { "titles": { "main_title": "美国国家紧急状态持续增长", "sub_title": "1976年以来宣布的紧急状态中大多数仍然有效" } } ``` ### 5. 色彩推荐模块 (color_recommender) 为可视化推荐配色方案。 **输入**: 包含chart_type、datafacts、titles和layout的数据对象 **输出**: ```json { "colors": { "field": { "US": "blue", "China": "red" }, "other": { "primary": "#E63946", "secondary": "#457B9D" }, "available_colors": ["#A9D700", "#FFD700"], "background_color": "#FFFFFF", "text_color": "#1D3557" } } ``` ### 6. 图像推荐模块 (image_recommender) 推荐与图表内容相关的图像和图标元素。 **输入**: 包含chart_type、datafacts、titles、layout和colors的数据对象 **输出**: ```json { "images": { "field": { "Still active": "data:image/svg+xml;base64,...", "Ended": "data:image/svg+xml;base64,..." }, "other": { "primary": "data:image/svg+xml;base64,...", "man": "data:image/svg+xml;base64,..." } } } ``` ### 7. 图表模板实现引擎 (chart_engine) 基于前面模块的输出生成图表的SVG表示。支持ECharts和D3.js渲染引擎。 **输入**: JSON数据对象 **输出**: ```json { "chart_svg": "..." } ``` ### 8. 标题元素生成模块 (title_styler) 为标题和副标题生成SVG元素。 **输入**: JSON数据对象 **输出**: ```json { "title_svg": "..." } ``` ## 使用方式 ### 安装 ```bash git clone https://github.com/yourusername/ChartPipeline.git cd ChartPipeline pip install -r requirements.txt ``` ### 信息图生成(推荐) ```bash # 批量处理 python pipeline.py --modules infographics_generator --input /path/to/input/data --output /path/to/output --threads 12 # 指定图表类型 python pipeline.py --modules infographics_generator --input /path/to/input/data --output /path/to/output --threads 12 --chart-name donut_chart_03_d3_hand ``` ### 完整流水线 ```bash # 单个文件处理(模块1-9) python pipeline.py --modules all --input /path/to/data.json --output /path/to/output --threads 1 ``` ### 图表引擎独立使用 ```bash # 生成SVG图表 python -m modules.chart_engine.chart_generation --input /path/to/data.json --output chart.svg --name chart_type_name # 生成HTML调试版本 python -m modules.chart_engine.chart_generation --input /path/to/data.json --output chart.svg --name chart_type_name --html debug.html ``` ### 参数说明 - `--modules`: 模块集合(`infographics_generator` 或 `all`) - `--input`: 输入数据路径 - `--output`: 输出路径 - `--threads`: 并行线程数 - `--chart-name`: 图表类型名称(可选) - `--html`: 输出HTML调试文件(仅chart_engine支持) ## 扩展 - [如何编写Chart variation](docs/how_to_write_a_variation.md) - [图表类型文档](docs/chart_types_documentation.md) ## 示例 请参考 `test/` 目录下的示例数据和输出。