# Gmt Plot:verify

> GMT 图件布局校验技能。调用 `scripts/verify_plot.py` 脚本，对绘制完成的 GMT 图件进行两项核心检测： 图例/色标/比例尺是否覆盖主图框边框，以及是否放置在数据高密度区域。输出结构化的校验报告， 作为后续图件修饰的反馈指导。触发场景：GMT 图件已生成、需要检查图件布局质量、修饰前需要定位具体排版问题。

- Skill: `zhongpenggeo/gmt-plot-verify` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add zhongpenggeo/gmt-plot-verify`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhongpenggeo/gmt-plot-verify/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zhongpenggeo (https://skillmd.com/u/zhongpenggeo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zhongpenggeo/gmt-plot-verify

---


# GMT 图件布局校验技能

你是一个地学图件排版审阅专家。核心流程：调用 `scripts/verify_plot.py` 脚本，对 GMT 图件（PNG/JPG）进行两项核心检测：
1. 图例/色标/比例尺是否覆盖了主图框边框
2. 图例/色标/比例尺是否放置在数据高密度区域

## 设计理念

与 `gmt_plot:compare`（依赖视觉模型做整体质量评估）不同，本技能使用程序化图像分析做像素级检测，专注于布局层面的两个关键问题：边框重叠和密度遮挡。这两项是 GMT 图件最常见且最影响专业性的布局问题。

## 前提条件

1. 确认 PNG/JPG 图件文件已生成且可访问
2. `plan.md` 已由 `gmt_plot:plan` 生成（用于判断图中应有哪些组件）
3. 依赖安装：`pip install opencv-python-headless numpy Pillow`

## 检测逻辑

### 计划驱动

脚本解析 `plan.md`，**只检测计划中明确提到的元素**，避免将地图特征误判为组件：

| 场景 | 行为 |
|------|------|
| plan 提到色标 | 检测色标，未找到则报告 ❌ |
| plan 提到图例 | 检测图例，未找到则报告 ❌ |
| plan 提到比例尺 | 检测比例尺，未找到则报告 ❌ |
| plan **未**提到图例 | 跳过图例检测 |
| 未提供 plan | 检测所有元素（兼容模式） |

### 检测项一：边框覆盖检测

1. 检测主图框（内容边界扫描法，识别图框四条边）
2. 检测色标条（梯度分析法，搜索主图框外三个方向）
3. 检测图例（轮廓拟合法，搜索主图框内部带边框的浅色矩形）
4. 检测比例尺（水平梯度法，搜索图框底部交替黑白矩形模式）
5. 逐一检查每个已检测到的组件是否与主图框边框重叠（含 3px 边框/刻度容差）

报告内容：
- **❌ 不合格**：组件与图框边框重叠
- **✅ 通过**：组件与图框边框间有间距

### 检测项二：密度放置检测

1. 主图框内部划分为 8×8 网格
2. 每格计算颜色方差（60%）+ 边缘密度（40%）
3. 对每个已检测到的组件，计算其中心所在格的密度百分位
4. 密度 > 80 百分位 → ❌ 高密度区，可能遮挡重要数据
5. 密度 > 65 百分位 → ⚠️ 中等密度区，建议优化
6. 密度 ≤ 65 百分位 → ✅ 稀疏区，位置合适
7. 输出四角密度对比，推荐最佳放置角落

## 执行流程

### 第一步：运行 verify_plot.py

```bash
python3 scripts/verify_plot.py <image_path> --plan plan.md [--output REPORT.md] [--output-dir DIR]
```

**参数说明：**
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `image` | （必填） | 待校验的 GMT 图件路径（png/jpg） |
| `--plan plan.md` | 建议提供 | 绘图计划文件，用于确定预期元素 |
| `--output REPORT.md` | `verify_report.md` | 校验报告输出路径 |
| `--output-dir DIR` | `.` | 输出目录 |

**示例：**
```bash
python3 scripts/verify_plot.py ./output.png --plan plan.md --output verify_report.md
```

### 第二步：解读校验报告

脚本执行成功后，读取校验报告，重点关注：

- **检查一（边框覆盖）**：如有 ❌，说明组件贴住了图框，需要在 GMT 中调整偏移参数
- **检查二（密度放置）**：如有 ❌/⚠️，说明组件可能遮挡了重要数据，需要移到数据稀疏的角落
- **四角密度对比**：报告会给出四个角的密度值和建议最佳位置

然后将校验结果告知用户，供 `gmt_plot:polish` 阶段修改。

## 校验报告格式

```markdown
## 图件布局校验报告

### 基本信息
- 校验图件: <路径>
- 图件尺寸: WxH px
- 校验时间: <时间戳>

### 元素检测结果
| 元素 | 计划预期 | 检测结果 |
|------|----------|----------|
| 色标 | ✅/—     | ✅/❌     |
| 图例 | ✅/—     | ✅/❌     |
| 比例尺 | ✅/—   | ✅/❌     |

### 检查一：组件是否覆盖主图框边框
✅ 通过  /  ❌ <问题描述> + 修改建议

### 检查二：组件是否放置在数据高密度区域
✅ 通过  /  ⚠️❌ <问题描述> + 修改建议

### 主图框信息密度分布（8×8 网格）
<ASCII 密度热力图>
四角密度 + 建议最佳放置位置
```

## 错误处理

如果脚本执行失败：
1. 确认 `pip install opencv-python-headless numpy Pillow` 已安装
2. 检查图件是否存在且可读（支持 PNG/JPG）
3. 如果主图框检测不到（无边框图件），脚本会使用保守的 fallback 边界
4. 如果某组件未检测到，该组件对应的检查会被跳过

## 使用限制

1. 仅适用于 GMT 标准单幅主图布局
2. 多子图场景检测可能不完整
3. 建议图件分辨率不低于 300×300 像素
4. 图件应有可见的边框线，否则主图框检测精度下降
5. 不检测指北针、标题、经纬度标注等其他元素

