name: visualization-check description: 用于审查数据可视化或图形的清晰度,检查图形是否能在没有额外上下文的情况下传达其信息,或迭代R/Python绘图脚本,直到天真读者能完全理解图形。
可视化检查
使用上下文无关的子代理作为天真读者的迭代审查循环。子代理仅看到图像——没有研究上下文、没有轴解释、没有预期结论。如果子代理无法理解图形,真实读者也无法理解。
何时使用
- 生成图形后(R、Python或任何工具)
- 提交图形用于出版前
- 当图形感觉不清晰但无法确定原因时
- 当需要客观的“新鲜眼光”反馈时
工作流程
digraph viz_check {
rankdir=TB;
node [shape=box];
start [label="用户提供图像路径
(可选生成脚本)" shape=doublecircle];
preprocess [label="下采样为预览
(sips → /tmp)"];
launch [label="派遣审查子代理
(只读,上下文无关)"];
feedback [label="子代理返回结构化报告:
理解度 / 问题 / 评级"];
decide [label="清晰度 >= 4 且
主要信息正确?" shape=diamond];
analyze [label="将反馈映射到
可操作的脚本更改"];
fix [label="编辑生成脚本
+ 应用可视化最佳实践"];
render [label="重新渲染图形"];
done [label="图形通过天真读者测试
— 完成" shape=doublecircle];
start -> preprocess;
preprocess -> launch;
launch -> feedback;
feedback -> decide;
decide -> done [label="是"];
decide -> analyze [label="否"];
analyze -> fix;
fix -> render;
render -> preprocess [label="下采样新
渲染 + 派遣
新子代理"];
}
步骤0:为子代理预处理图像
高DPI出版图形(300 DPI,2000-4500px宽)会消耗过多上下文标记并可能导致子代理达到上下文限制。 在派遣前始终下采样。
预处理命令
使用 sips(macOS内置)创建预览副本:
sips --resampleWidth 800 "{ORIGINAL_PATH}" --out "/tmp/viz_check_preview.png"
规则
- 在派遣前始终下采样,无论文件大小。这很便宜且能防止失败。
- 预览保存到
/tmp/— 永不修改原始图形。 - 在子代理提示中使用预览路径 (
/tmp/viz_check_preview.png),而非原始路径。 - 每次重新渲染后重新预处理 — 原始图形变化,预览必须重新生成。
- 对于多图形并行模式,使用唯一文件名:
/tmp/viz_check_preview_{basename}.png
多图形预处理
并行审查多个图形时,先批量预处理:
for fig in path/to/figures/*.png; do
basename=$(basename "$fig")
sips --resampleWidth 800 "$fig" --out "/tmp/viz_check_preview_${basename}"
done
然后为每个子代理派遣对应的 /tmp/viz_check_preview_{basename}.png。
步骤1:派遣天真读者子代理
您必须为每轮审查派遣一个审查子代理。 不要试图自我审查 — 关键是上下文无关的眼光。
子代理配置
| 设置 | 值 | 原因 |
|---|---|---|
subagent_type |
Explore |
只读工具(Read、Glob、Grep)。防止意外修改脚本或图形。 |
max_turns |
3 |
子代理只需读取图像并写入报告。 |
| Resume | 永不 | 每轮使用新的子代理。永不恢复之前的审查者。 |
子代理提示模板
您是第一次看到这个图形的天真读者。您没有关于研究、数据或目的的任何上下文。读取图像文件,然后生成结构化审查。
## 图像
读取图像文件:{PREVIEW_PATH}
## 结构化审查模板
### A. 理解(您理解的内容)
1. 这个图形展示什么?用您自己的话描述。
2. 轴/标签是什么?总结每个。
3. 主要信息或要点是什么?
### B. 混淆点(不清晰的内容)
列出所有不清晰、模糊或难以阅读的元素。具体说明 — 引用位置(左上角、底部面板等)并引用任何有问题的文本。
### C. 视觉质量检查清单
对每个项目,标记通过 / 失败 / 不适用:
- [ ] 颜色可区分(灰度下也可区分?)
- [ ] 所有文本在此尺寸下可读(标签无重叠?)
- [ ] 参考线 / 阈值已标注
- [ ] 没有不必要的图表装饰(网格线、边框、装饰)
- [ ] 图例(如果有)在没有上下文的情况下自解释
- [ ] 良好的数据墨比率(数据与非数据元素)
- [ ] 缩写已拼写或自明显
### D. 清晰度评级
评分1(无法理解)到5(立即清晰)。用一句话说明理由。
### E. 前3个推荐修复
优先级最高的改进列表。
上下文污染规则
不要在子代理提示中包含:
- 研究描述或目的
- 轴代表什么
- 预期结论或趋势
- 变量名或领域术语解释
- 先前迭代的反馈
- 生成脚本或其路径
甚至说“这是生存曲线”都透露太多信息。让子代理自己理解。
步骤2:分析反馈
将子代理的混淆点映射到具体的脚本更改:
| 子代理说 | 可能的修复 |
|---|---|
| “无法读取轴标签” | 增加 axis.text 大小,减少刻度密度 |
| “不知道颜色含义” | 添加/改进图例,使用更明显的调色板 |
| “太多线条/元素” | 简化:减少序列,使用分面而非叠加 |
| “这条虚线是什么?” | 直接在图上标注参考线 |
| “无法判断趋势” | 增加线宽,减少噪音,添加平滑 |
| “轴令人困惑” | 更好的轴标题,考虑对数尺度,添加单位 |
| “太杂乱” | 移除网格线,减少图表装饰,增加空白 |
| “颜色看起来相似” | 使用色盲安全调色板(viridis、okabe-ito) |
| “缩写不清晰” | 首次使用时拼写,或添加副标题/脚注 |
步骤3:应用数据可视化最佳实践
修复层次(影响最大优先)
- 标签和标题:自解释的轴标签带单位。无缩写。
- 参考线:直接在图上标注(不仅在图例中)。
- 颜色:色盲安全,灰度下可区分。使用
scale_color_viridis_d()或 Okabe-Ito。 - 简化:移除冗余网格线、边框、背景。
theme_minimal()或theme_classic()。 - 文本大小:所有文本在最终打印尺寸下可读(通常最小8-10点)。
- 数据墨比率:最大化数据,最小化装饰。
- 直接标注:尽可能直接标注线条/点而非使用图例。
R特定模式
# 出版图形的良好默认
theme_publication <- theme_minimal(base_size = 14) +
theme(
axis.title = element_text(size = 14, face = "bold"),
axis.text = element_text(size = 12),
legend.position = "bottom",
panel.grid.minor = element_blank(),
plot.title = element_text(size = 16, face = "bold")
)
# 色盲安全调色板
scale_color_viridis_d() # 顺序
scale_color_brewer(palette = "Set2") # 分类
步骤4:重新渲染和迭代
- 用修复编辑生成脚本(修复源文件,而非PNG)
- 重新运行脚本以生成更新的图形
- 重新预处理:
sips --resampleWidth 800新渲染到/tmp/(旧预览已过时) - 派遣新子代理(新上下文,相同模板)指向新预览
- 退出条件:子代理评级清晰度 >= 4/5 且正确识别主要信息
典型迭代:2-3轮。
多图形模式
审查多个独立图形时,并行派遣审查子代理 — 每个图形一个。每个子代理仅接触自己的图像(无共享状态)。
digraph multi_fig {
rankdir=LR;
node [shape=box];
dispatch [label="并行派遣N个子代理"];
fig1 [label="子代理1
审查fig1.png"];
fig2 [label="子代理2
审查fig2.png"];
fig3 [label="子代理3
审查fig3.png"];
collect [label="收集所有报告
并顺序修复"];
dispatch -> fig1;
dispatch -> fig2;
dispatch -> fig3;
fig1 -> collect;
fig2 -> collect;
fig3 -> collect;
}
对于共享视觉一致性要求的图形(相同配色方案、轴样式),在单个审查后进行最终合成步骤以检查跨图形一致性。
常见陷阱
- 将上下文泄露给子代理:最常失败的模式。在派遣前检查提示。
- 重用同一子代理:先前的反馈造成污染。始终派遣新的。
- 过度迭代:如果子代理正确识别主要信息但挑剔美学,即已完成。
- 忽略生成脚本:修复源文件(R/Python脚本),而非PNG。确保可重复性。
- 使用通用子代理:使用
Explore(只读)以防止审查者意外修改文件。
快速开始
/visualization-check path/to/figure.png
如果还知道生成脚本:
/visualization-check path/to/figure.png --script path/to/plot_script.R
代理将:
- 找到生成脚本(如果未提供,搜索它)
- 下采样到
/tmp/预览 (sips --resampleWidth 800) - 用预览路径派遣天真读者子代理(只读,上下文无关)
- 收集结构化反馈报告
- 编辑脚本并重新渲染
- 重新预处理 + 派遣新子代理进行重新审查
- 重复直到清晰度 >= 4/5