# 书稿 ggplot 出图 — 本地验证沙盒

在 **harness 仓库内**验证 `scripts/book-plot/` 的 R 与 Python 资产。测试脚本直接读上一级 canonical 的 `R/` 与 `py/`，不另设镜像（文件都是纯文本小脚本，改完即测）。产物不提交 Git。

## 快速开始

在 harness 仓库根：

```powershell
Rscript scripts/book-plot/test/Rscript/test-ylab-stack.R   # L0：切词与常量，任何平台
Rscript scripts/book-plot/test/Rscript/run-l1-ragg.R       # L1：ragg 出图 + 近白检查，Windows
```

| 层级 | 检查什么 | 前提 |
|------|----------|------|
| L0 | `split_ylab_unit` 全角/半角/无括号；`stack_ylab` 保护 `RD`、`R&D`，拉丁词与小数整段；`theme_ylab_stack` 角度 | R、ggplot2 |
| L1 | 单图与分面各一张，经 `ragg::agg_png`（白底）写到 `output/l1/`，再跑 `py/check-fig-png.py`；另写一张透明底，确认门禁会拒绝 | Windows 宋体、ragg、Python + Pillow |

L1 先用 `systemfonts::match_fonts("simsun")` 确认宋体存在；找不到就停，因为回退字体的图不会是白的，近白检查发现不了。

## 目视

L1 通过后打开 `output/l1/l1-single.png` 与 `l1-facet.png`：

- 单图：纵轴题 `RD / 资 / 金 / 投 / 入` 正向竖排，不压刻度 `13000`；`（亿元）` 在纵轴正上方。
- 分面：两面各自竖排题，第二面无单位；分面条已关。

## 迭代原则

1. 改 canonical `R/` 或 `py/` 后先跑 L0，再在 Windows 跑 L1。
2. 记录写在 `TEST-LOG.md`（本地，不提交）。
3. 通用流程见 [docs/harness-asset-validation-workflow.qmd](../../../docs/harness-asset-validation-workflow.qmd)。
