Files
terminal-chart-server/README.md
titor ba927c2b2f feat: initial release v0.3.0
- Support 9 chart types: line, bar, pie, scatter, bubble, donut, mixed, polar, radar
- Multi-format output: ANSI, SVG, PNG, Markdown
- Go + Fiber + gonum/plot
- Docker support
- Morandi color palette
2026-04-16 04:33:02 +08:00

277 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Picoclaw Chart
一个轻量级的图表生成 API 服务支持多种图表类型返回多种格式ANSI、SVG、PNG、Markdown适配命令行和 Web 场景。
## 功能特性
- **多种图表类型**:折线图、柱状图、饼图、散点图、气泡图、圆环图、混合图、极区图、雷达图
- **多格式输出**ANSI终端、SVG矢量图、PNG位图、MarkdownWeb
- **轻量高效**Go 语言编写,单二进制部署
- **Docker 支持**:开箱即用的容器化部署
## 支持的图表类型
| 类型 | 英文名 | 说明 |
|------|--------|------|
| `line` | 折线图 | 展示数据趋势变化 |
| `bar` | 柱状图 | 对比分类数据 |
| `pie` | 饼图 | 展示占比关系 |
| `scatter` | 散点图 | 展示数据分布 |
| `bubble` | 气泡图 | 展示多维度数据 |
| `donut` | 圆环图 | 饼图的变体 |
| `mixed` | 混合图 | 柱状图+折线图组合 |
| `polar` | 极区图 | 展示方向/角度数据 |
| `radar` | 雷达图 | 展示多维度对比 |
## 快速开始
### Docker 部署(推荐)
```bash
# 克隆项目
git clone <your-repo-url>
cd picoclaw-chart
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
```
### 本地运行
```bash
# 下载依赖
go mod download
# 运行服务
go run ./cmd/server
# 或者编译后运行
go build -o server ./cmd/server
./server
```
### 环境变量
复制 `.env.example``.env` 并修改:
```bash
SERVER_PORT=3100
BASE_URL=http://localhost:3100
```
## API 文档
### 基本信息
| 属性 | 值 |
|------|-----|
| 端点 | `http://localhost:3100/api/v1/chart` |
| 方法 | `POST` |
| 内容类型 | `application/json` |
### 请求参数
```json
{
"type": "bar",
"title": "图表标题",
"data": {
"labels": ["一月", "二月", "三月"],
"datasets": [
{
"name": "销售额",
"values": [100, 150, 120],
"color": "#f9c2c8"
}
]
},
"options": {
"width": 600,
"height": 400
}
}
```
### 参数说明
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `type` | string | 否 | 图表类型,默认 `line` |
| `title` | string | 否 | 图表标题 |
| `data.labels` | array | 是 | 数据标签 |
| `data.datasets` | array | 是 | 数据系列 |
| `datasets[].name` | string | 否 | 系列名称 |
| `datasets[].values` | array | **是** | 数值数组 |
| `datasets[].color` | string | 否 | 十六进制颜色 |
| `options.width` | integer | 否 | 图表宽度 |
| `options.height` | integer | 否 | 图表高度 |
### 响应字段
| 字段 | 说明 |
|------|------|
| `chart_id` | 图表唯一标识 |
| `text` | 纯文本描述 |
| `ansi` | ANSI 彩色文本(终端) |
| `svg` | SVG 矢量图代码 |
| `png_url` | PNG 下载 URL |
| `markdown` | Markdown 格式 |
### API 示例
```bash
# 创建柱状图
curl -X POST http://localhost:3100/api/v1/chart \
-H "Content-Type: application/json" \
-d '{
"type": "bar",
"title": "月度销售额",
"data": {
"labels": ["一月", "二月", "三月", "四月"],
"datasets": [
{ "name": "销售额", "values": [100, 150, 120, 180] }
]
}
}'
# 下载 PNG
curl -O http://localhost:3100/api/v1/chart/{chart_id}.png
# 健康检查
curl http://localhost:3100/api/v1/health
```
### API 端点
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/v1/chart` | 创建图表 |
| GET | `/api/v1/chart/:id` | 获取 SVG |
| GET | `/api/v1/chart/:id.png` | 下载 PNG |
| GET | `/api/v1/health` | 健康检查 |
## 使用示例
### 折线图
```json
{
"type": "line",
"title": "温度趋势",
"data": {
"labels": ["周一", "周二", "周三", "周四", "周五"],
"datasets": [
{ "name": "最高温", "values": [22, 25, 28, 27, 30], "color": "#f9c2c8" },
{ "name": "最低温", "values": [15, 17, 18, 16, 19], "color": "#8fa3c4" }
]
}
}
```
### 饼图
```json
{
"type": "pie",
"title": "市场份额",
"data": {
"labels": ["苹果", "三星", "华为", "其他"],
"datasets": [
{ "name": "销量", "values": [35, 25, 20, 20] }
]
}
}
```
### 雷达图
```json
{
"type": "radar",
"title": "员工能力评估",
"data": {
"labels": ["速度", "力量", "耐力", "智力", "敏捷"],
"datasets": [
{ "name": "张三", "values": [80, 70, 90, 85, 75] }
]
}
}
```
### 混合图
```json
{
"type": "mixed",
"title": "销售与目标对比",
"data": {
"labels": ["一月", "二月", "三月", "四月"],
"datasets": [
{ "name": "实际", "values": [100, 150, 120, 180] },
{ "name": "目标", "values": [120, 140, 130, 160] }
]
}
}
```
## 默认配色
柔和莫兰迪色系:
| 索引 | 颜色 | HEX |
|------|------|-----|
| 0 | 粉橙 | `#f9c2c8` |
| 1 | 杏色 | `#f3d2b1` |
| 2 | 淡绿 | `#e1e9c5` |
| 3 | 浅蓝 | `#b2d5e8` |
| 4 | 灰蓝 | `#8fa3c4` |
| 5 | 青绿 | `#75B4A0` |
| 6 | 深青 | `#3b7f8d` |
| 7 | 棕灰 | `#a18b7c` |
## 项目结构
```
picoclaw-chart/
├── cmd/server/ # 程序入口
├── internal/
│ ├── config/ # 配置管理
│ ├── handler/ # HTTP 处理层
│ ├── renderer/ # 图表渲染器
│ │ ├── svg.go # SVG 渲染
│ │ ├── png.go # PNG 渲染
│ │ ├── ansi.go # ANSI 渲染
│ │ ├── text.go # 文本渲染
│ │ └── utils.go # 工具函数
│ ├── service/ # 业务逻辑层
│ └── types/ # 数据结构
├── .env.example # 环境变量示例
├── Dockerfile
├── docker-compose.yml
├── skill.md # Skill 文档
└── README.md
```
## 与 picoclaw 集成
将此服务与 picoclaw Agent 集成,只需在 picoclaw 的 skills 配置中添加 `skill.md` 的内容即可。
Agent 可以通过 curl 调用此 API 生成图表,根据使用场景选择返回的格式:
- 终端显示:使用 `ansi` 字段
- Web 展示:使用 `markdown` 字段
- 内嵌 SVG使用 `svg` 字段
## 技术栈
- **语言**Go 1.21+
- **框架**Fiber v2
- **图表库**gonum/plot
- **容器**Docker, Docker Compose
## License
MIT License