# Byteplan Chart

> BytePlan AI 图表生成技能。当用户查询 byteplan 中的数据、请求数据可视化、生成图表（如"查看不同性别分数段分布"、"查询学生成绩分布"、"byteplan 数据分析"）时自动触发。支持 12 种图表类型（柱状图、折线图、饼图等）。

- Skill: `dvcrn/byteplan-chart` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add dvcrn/byteplan-chart`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/byteplan-chart/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/byteplan-chart

---


# BytePlan Chart - BytePlan AI 图表生成技能

## 功能描述

通过 BytePlan AI 接口自动生成数据可视化图表，支持 12 种图表类型。

## 配置说明

### 环境变量（`.env` 文件）

```bash
# BytePlan API 配置
BYTEPLAN_BASE_URL=https://uatapp.byteplan.com
BYTEPLAN_AUTH_USER=PC
BYTEPLAN_AUTH_PASS=你的认证密码

# 登录参数
BYTEPLAN_USERNAME=你的用户名
BYTEPLAN_PASSWORD=你的密码（会自动 RSA 加密）
BYTEPLAN_GRANT_TYPE=password
BYTEPLAN_SCOPE=write
# BYTEPLAN_PUBLIC_KEY_ID 不再需要，运行时动态获取

# AI 配置
BYTEPLAN_AGENT_ID=Agent ID（可选，留空则自动生成）
BYTEPLAN_PAGE_CODE=AI_REPORT

# 图表配置
CHART_WIDTH=800
CHART_HEIGHT=600
CHART_OUTPUT_DIR=charts
```

### 配置项说明

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| BYTEPLAN_BASE_URL | BytePlan API 基础 URL | https://uatapp.byteplan.com |
| BYTEPLAN_AUTH_USER | API 认证用户名 | PC |
| BYTEPLAN_AUTH_PASS | API 认证密码 | - |
| BYTEPLAN_USERNAME | 登录用户名 | - |
| BYTEPLAN_PASSWORD | 登录密码（自动 RSA 加密） | - |
| BYTEPLAN_AGENT_ID | AI Agent ID | 自动生成 |
| CHART_OUTPUT_DIR | 图表输出目录 | charts |

## 使用方法

### 命令行

```bash
cd skills/byteplan-chart
uv run python main.py <查询内容>
```

### 示例

```bash
# 查询不同分数段学生数量
uv run python main.py 查询不同分数段学生数量

# 查看不同性别分数段分布
uv run python main.py 查看不同性别分数段分布

# 生成折线图
uv run python main.py 展示每月销售趋势
```

## 支持的图表类型

### 全部支持（12 种）✅

| 类型 | 说明 | 状态 |
|------|------|------|
| Line | 折线图 | ✅ |
| Column | 柱状图（支持分组/堆叠） | ✅ |
| Bar | 条形图 | ✅ |
| Area | 面积图 | ✅ |
| Pie | 饼图 | ✅ |
| Rose | 南丁格尔玫瑰图 | ✅ |
| Scatter | 散点图 | ✅ |
| Box | 箱型图 | ✅ |
| Heatmap | 热力图 | ✅ |
| DualAxisChart | 双轴图（柱状图 + 折线图） | ✅ |
| DetailTable | 明细表 | ✅ |
| PivotTable | 透视表 | ✅ |

**测试时间**: 2026-03-13 12:40  
**测试结果**: 12/12 通过 ✅

## 工作流程

1. 🔑 请求公钥接口获取 RSA 公钥（含 keyId 和 key）
2. 🔐 使用公钥对密码进行 RSA 加密
3. 🔑 使用加密后的密码和 keyId 登录获取 access_token
4. 📡 调用 AI 接口识别 model_code
5. 📊 执行 AI 分析请求获取图表数据
6. 🎨 使用 **matplotlib** 渲染图表为 PNG（**纯 Python 方案，自动检测中文字体**）

## 渲染方案

**当前使用：matplotlib（纯 Python）**

| 特性 | 说明 |
|------|------|
| **渲染引擎** | matplotlib 3.10+ |
| **字体处理** | 自动检测系统字体并配置 |
| **支持平台** | Windows / macOS / Linux |
| **输出格式** | PNG（150 DPI） |

### 字体检测

渲染时自动执行：
1. 检测操作系统
2. 查找预装中文字体
3. 配置 matplotlib 字体参数
4. 输出检测日志

**支持的字体**：
- Windows: Microsoft YaHei（微软雅黑）、SimHei（黑体）、SimSun（宋体）
- macOS: PingFang SC（苹方）、Heiti SC（黑体）
- Linux: WenQuanYi Zen Hei（文泉驿）、Noto Sans CJK

**如遇到中文乱码**：
```bash
# Linux 安装字体
sudo apt-get install fonts-wqy-zenhei fonts-noto-cjk  # Ubuntu/Debian
sudo yum install wqy-zenhei-fonts google-noto-sans-cjk-fonts  # CentOS/RHEL
```

## 输出

- **图表文件**: `charts/antv_chart_YYYYMMDD_HHMMSS.png`
- **控制台输出**: 完整的 API 响应和图表信息

## 依赖

- Python 3.8+
- Python 包：`requests`, `python-dotenv`, `pycryptodome`, `matplotlib`, `numpy`

## 安装依赖

### 第一步：创建虚拟环境

**Windows**:
```bash
cd C:\Users\wangshuai\.openclaw\skills\byteplan-chart
uv venv
```

**macOS / Linux**:
```bash
cd ~/.openclaw/skills/byteplan-chart
uv venv
```

### 第二步：安装 Python 包

```bash
uv pip install requests python-dotenv pycryptodome matplotlib numpy
```

### 🍎 macOS 兼容性

- ✅ **完全兼容** macOS 10.15+ (Catalina 或更高版本)
- ✅ **中文字体**: 自动检测并使用 PingFang SC（苹方）或 Heiti SC（黑体）
- ✅ **路径处理**: 使用 `pathlib.Path` 自动适配 macOS 路径格式
- ✅ **编码**: UTF-8 编码，无乱码问题

## 验证安装

```bash
cd skills/byteplan-chart
uv run python main.py 查询不同分数段学生数量
```

查看输出中的字体检测信息：
```
🔍 检测系统中文字体...
✅ 找到中文字体：Microsoft YaHei
✅ 字体配置成功：Microsoft YaHei
```

## 🔧 修复记录（2026-03-13）

### 问题 1：渲染脚本调用命令错误
- **文件**: `main.py` (第 473 行)
- **问题**: 使用 `py` 命令在虚拟环境中找不到 matplotlib
- **修复**: 改为 `uv run python` 确保在虚拟环境中运行
- **代码**: `['uv', 'run', 'python', str(render_script), ...]`

### 问题 2：参数检查错误
- **文件**: `render_chart.py` (第 607 行)
- **问题**: `len(sys.argv) < 4` 检查错误，实际只需要 3 个参数
- **修复**: 改为 `len(sys.argv) < 3`
- **说明**: 参数 = 脚本名 + JSON 字符串 + 输出路径

### 问题 3：依赖缺失
- **问题**: 虚拟环境中缺少 matplotlib 等必要的 Python 包
- **修复**: 使用 `uv pip install` 安装所有依赖

## 安全提示

- `.env` 文件包含敏感信息，请勿提交到版本控制
- 建议将 `.env` 添加到 `.gitignore`
- 定期更新 API 凭证

