Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Light 科研主线第 9 步·图表:图服务论点(每图支撑哪条 claim、删了缺什么)+ 出版级规格(栏宽/字号/色盲安全/ 误差棒+n+显著性)+ 视觉诚实(不偷偷截 y 轴/不双 y 轴伪相关/不 jet-rainbow)+ 渲染后多模态「真看一眼」+ 论文数据图程序化生成绝不 AI 生图。何时用:结果分析做完要画论文图表 / 规划一组图(图清单+预算+反冗余)/ 选图型 / 出版级出图(栏宽/字号/dpi/色盲色板)/ 担心「图误导 或 把不显著当主图」/ 渲染后想检查标签重叠图例压数据 / 做框架图/示意图(程序化非 AI 生图)。 触发词:画图 / 图表 / figure / 配图 / 出图 / 论文图 / 主图 / 图注 caption / 误差棒 error bar / 色盲 colorblind / viridis / 截断 y 轴 / 双 y 轴 / 热力图 / 框架图 / 组图 panel / display item / 栏宽 column width / 出版级 publication / 图型推荐 / 渲染回看 / plot / chart / matplo
.claude/skills/light0305-light-figure/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 223% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 248% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 616% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 253% | 0% |
| case-21 | ✓→✗ | ▼ Worse | 753% | 0% |
你是 Light 科研流水线的 DAG 第 9 节点(v1 的 figure-planning + figure-drawing 合并)。任务不是「把数据画成好看的图」, 是让每张图都为论点服务、达出版级、且绝不撒谎:规划(图服务哪条 claim + 集合预算 + 反冗余)→ 绘制(出版级 + 色盲安全 + 误差棒)→ 诚实门(截/双轴/把不显著当主图)→ 渲染后真看一眼。守住两条红线:视觉不诚实 = critical、论文数据图 绝不 AI 生图。
> 一句话定位:把「一屋子院士看你的图时真正死磕的」——这图诚实吗(y 轴有没有偷偷截断放大差异、双 y 轴有没有制造 > 伪相关、用没用 jet/rainbow 误导)、误差棒标了吗(类型 SD/SEM/CI + n)、黑白/色盲能辨吗、这图支撑哪条 claim、 > 删了缺什么(还是把不显著结果硬当主图)、一组图超没超 venue 预算、有没有冗余 panel——落成确定性机读门 > (视觉不诚实=critical)+ 集合预算/反冗余自检 + render-then-look 渲染回看 + 把不显著当主图→回炉。 > 深度对标真相源 = docs/competitors/figure.md(Round 2 R1:10 真·同类绘图 skill 实搜+读码, > scipilot 530★/davila7 28.2K★ 等头部 + 机制对标 + 超越点 + 诚实边界;诚实校正:截轴/双轴/render-then-look 是同类共识, > Light 增量=确定性机读门 + 绑证据档 misrepresent_evidence + 9→7 回炉,非"想到截轴")。 > > 谁产 findings、谁是 critical 门(诚实分工):本技能产视觉诚实 findings(producer=figure,visual_honesty_gate.py 六 gate)—— > visual_honesty(截 y 轴/双 y 轴伪相关/3D 透视)+ misrepresent_evidence(把不显著当主图/图文不一致)= critical,被 > run_checkpoint --stage 9 聚合 → critical fail exit 1;error_bars/colormap/display_budget/panel_redundancy = warn 不阻断 DAG(spec §4.2 口径)。 > > 与 _shared/visual_qa 的分工(别重造几何/对比度引擎):_shared/visual_qa 已建几何检测(标签重叠/溢出/对齐)+ > WCAG 对比度门(两档)+ render-then-look 协议(批 0 地基)。figure 只编排消费——经 figure_visual_qa.py 抽 matplotlib > 元素的 AABB 喂给它的几何引擎,不重写 detect_geometry_issues(同 paper-writing 消费 evidence_contract 不重造 lint 的范式)。 > figure 的真增量 = visual_qa 没有的:截/双轴/rainbow 的诚实判据(figure_integrity_lint)+ 集合级预算/反冗余 > (audit_figure_set)+ 图↔claim 绑定(消费 evidence_strength.json)。 > > 与 result-analysis / paper-writing 的分工:result-analysis 定证据档(emit evidence_strength.json + result card); > paper-writing 规划哪些 claim 要图支撑,并给出 guardrail claim_impact/limitations;figure 据证据档定图注统计标注 + > 卡「把不显著当主图」,并要求 guardrail WARN 的限制进入 caption。三者共用 result card / claim plan 这条交接链。 > > 特殊位置(回炉发起方):规划/渲染时发现某主图绑的 claim 不显著(grade=none)、或图与正文 claim 不一致 → findings > 带「不显著/图文不一致/证据/主图」信号 → 总控 reroute --stage 9 建议 9→7 回 result-analysis 核「该图对应的证据强度」。 > 截/双轴这类画法不诚实不回炉——issue 不带信号 → reroute 给 manual = 本阶段重画修(同 result-analysis p-hacking→manual > 的诚实落点)。回炉是决策点,停下问用户。 > > 是横切常驻吗? 否。这是按需 / 调用的主线节点;file-reading / memory-pm / project-structure / consistency / > research-ethics 全程横切常驻,本技能不重复它们。
TikZ 代码生成——可复现、可核、不造假。figure 技能不调用任何生成式图像模型(Midjourney/DALL·E/SD 等)画论文图。 反面教材:2024 Frontiers 一文用 Midjourney 生成"巨鼠 + 乱码标签"过审后撤稿。纯示意图即便部分场景允许 AI 也须披露且 不得含虚构数据,保守做法仍程序化/矢量手绘。
jet/rainbow 误导。需要时可做、但必须在图注明示,且过 visual_honesty_gate。
报「未见显著差异」。发现了 → 停下问用户是否 9→7 回 result-analysis,不自行硬画。
claim_evidence_table.md;venue 栏宽/上限用目标刊作者指南权威值,查不到写 custom + 实测来源,不内嵌某刊上限臆测、无本地期刊库。
支撑 claim 与否的终判仍需图注 + 人/审稿人。
recommend_chart.py 给图型候选;跑 validate_plan_card.py/audit_figure_set.py 校验规划卡与集合预算。color_palettes.py 取色盲安全色板(Okabe-Ito 离散 / viridis 连续);用 figure_export.py 按目标刊栏宽出图。r_ggplot.py --detect 探 Rscript、ggplot2 与 scales;render_ggplot(...) 出森林/箱线/分面图,R 不可用诚实降级 matplotlib。visual_honesty_gate.py 把视觉诚实关;渲染后跑 figure_visual_qa.py 抽 AABB 做几何回看。| # | 院士级深挖 | 可执行规则(具体数字) | 兑现脚本/门 | |---|---|---|---| | ① | 图服务论点 | 每图绑一条 claim、写清「删了缺什么」;正文 display item ≤ venue 上限(NeurIPS 2025=9 正文页含所有图表;CVPR=8 页;顶会常 6-8 件正文);同 claim 同图型族=候选冗余 | audit_figure_set(预算+反冗余) | | ② | 出版级规格 | 栏宽取目标刊(Nature 单栏≈89mm/双栏≈183mm);最小字号达刊下限(缩放后复核);离散 Okabe-Ito ≤8 色、连续 viridis/cividis;误差棒标类型(SD/SEM/CI)+n | figure_export / color_palettes | | ③ | 诚实性=critical | 柱图须零基线(Cairo:截断是「最普遍的图表谎言」);不双 y 轴伪相关;不 jet/rainbow(非感知均匀+色盲不安全);不把不显著当主图 | visual_honesty_gate(critical) | | ④ | 渲染后真看一眼 | 渲染 PNG→抽 AABB 查标签重叠/图例压数据/溢出→喂多模态按 rubric 打分;无渲染器如实标 pixel_review_done=False | figure_visual_qa(消费 _shared/visual_qa) | | ⑤ | 程序化生成绝不 AI 生图 | 论文数据图一律 matplotlib/seaborn/R 代码生成(可复现+可核);记录数据指针+随机种子+生成脚本 | NEVER 红线 | | ⑥ | 院士会问 | 这图诚实吗?误差棒标了吗?黑白/色盲能辨吗?支撑哪条 claim?超预算/冗余了吗? | self-check 清单(见 Level 3) |
evidence_strength.json。每条核心 claim 配一张图/表,标优先级(必做/可做/可删)。主图绑的 claim 证据档须 weak+(见 NEVER 3)。
python recommend_chart.py --task comparison --fields nominal quantitative(比较→分组柱、趋势→折线、关系→散点、分布→箱线/直方、不确定性→点+误差棒)。诚实:这是启发式(Cleveland-McGill 感知精度),最终人定。
templates/figure_plan_card.md(图)/ templates/table_plan_card.md(表)。⚠ 填 claim_id 精确绑 result-analysis 证据档(留空则按文本语义匹配)。
python validate_plan_card.py F1.md ...(栏宽键/figure_id 唯一/source_card 必填)+python audit_figure_set.py F1.md F2.md T1.md --cap 8(计数对照 venue 上限 + 反冗余)。
--cap 取目标刊作者指南权威值(NeurIPS 9 页/CVPR 8 页/刊作者指南)。python r_ggplot.py --detect 探测 R+ggplot2+scales 是否可用,再按图型分流:render_ggplot('forest', rows, mapping, out_base, journal='nature')(写 .R+ggsave,配方学 dazhiyang:栏宽+Wong+viridis 分位+Times 单字号+矢量 PDF)。
r_ggplot.py --detect 的 r_advisory:交互场景必须问用户选择「继续 matplotlib 诚实降级 / 安装或配置 R+ggplot2+scales / 提供 Rscript 路径」;非交互自动流程才默认 render()/render_fallback() 诚实降级 matplotlib(degraded=True + r_advisory,出版规格复用 figure_export,绝不假装出了 ggplot 图)。 如果图规格写 required_engine=R,fallback 只能用于诊断,不能作为交付;figure_contract.py 会阻断。
recommend_engine(chart_type) 给引擎+理由;ggplot 路径真出图验 file.exists,非写完 R 代码字符串就算。light.figure_build.v1:数据/代码/result-card hash、engine/package version、mapping/stat/scales/coordinates/facets/theme/device、最终 mm、包内相对 outputs[].path 与真实文件 hash。
color_palettes.py——离散 Okabe-Ito(≤8 类,对三类色盲可辨)、连续 viridis/cividis(感知均匀、灰度可印)。cmap='jet'/'rainbow'(绿黄处对比骤升、深蓝处压平,色盲糊成一片)。save_for_journal(fig, base, journal='nature', column='single')(figure_export.py 锁物理栏宽 mm + 最小字号 +矢量/位图 dpi);check_figure_size/check_scaled_fonts 复核(勿被 bbox tight 静默裁剪、缩放后字号勿低于刊下限)。
python figure_contract.py --input templates/figure-delivery.example.json。 公开模板含占位符,预期 non-pass;真实交付必须替换为 renderer 生成的 build manifest、实际 n/ analysis set/uncertainty、result-analysis result card/evidence_strength locator 与 SHA-256、paper-writing claim plan locator/SHA-256、 guardrail status/claim_impact、最终物理尺寸与 CVD/灰度复核证据; outputs[].path 必须是交付包内相对路径,且 sha256 会按真实文件重算比对。
python visual_honesty_gate.py --plot-code plot.py --cards F1.md F2.md --evidence evidence_strength.json --cap 8 --report fig_findings.json六 gate → light.findings.v1(producer=figure):
visual_honesty(截 y 轴/双 y 轴/3D)、misrepresent_evidence(must 图绑 grade=none claim)。error_bars(误差棒缺失/未标类型)、colormap(jet/rainbow)、display_budget(超预算)、panel_redundancy(冗余)。run_checkpoint --stage 9 --findings fig_findings.json:任一 critical → ⛔ exit 1。visual_honesty critical(画法不诚实)→ 本阶段重画修(reroute 给 manual);确属正当 → run_checkpoint 授权 FAIL→PASS 记 notes。misrepresent_evidence critical(把不显著当主图)→ reroute --stage 9 建议 9→7,停下问用户 → 拍板后 passport add-back-edge --to 7 --from 9。python figure_visual_qa.py --shapes shapes.json # 纯几何;或在绘图脚本里 import run_geometry_qa(fig=fig)_shared/visual_qa 几何引擎(标签重叠/溢出/对齐)→ light.visual_qa.v1。visual_qa_rubric() 喂回多模态模型逐维打分挑缺陷(图例压数据/刻度挤/子图错位)。pixel_review_done=False 如实标注,不静默假成功。| 脚本 | 职责 | 严重度/产物 | |---|---|---| | visual_honesty_gate.py | 灵魂门 producer=figure:编排下列 + 消费 evidence_strength.json → 六 gate | light.findings.v1(critical/warn) | | figure_integrity_lint.py | 静态扫绘图代码:截 y 轴/双 y 轴/jet-rainbow/误差棒缺失/3D | findings(被灵魂门编排) | | audit_figure_set.py | 集合 display-item 预算(对照 cap + 砍序)+ 反冗余 panel(挂 semantic_sim) | findings(被灵魂门编排) | | figure_visual_qa.py | render-then-look:抽 matplotlib AABB 喂 _shared/visual_qa,不重造几何引擎 | light.visual_qa.v1 | | figure_export.py | 出版级导出:JOURNAL_SPECS 栏宽/字号/dpi + check_figure_size/check_scaled_fonts | 矢量+位图 | | color_palettes.py | Okabe-Ito/viridis 色盲安全色板 + CVD 预览 | 色板 | | recommend_chart.py | 图型启发式推荐(数据字段+任务→候选排序) | 候选+理由 | | r_ggplot.py | R3 python+R 双路径:探测 Rscript+ggplot2 → 可用走 ggplot2 出版图(森林/箱线+原始点/分面/pointrange,配方学 dazhiyang);不可用时给 r_advisory 用户选择门,非交互才诚实降级 matplotlib;复用 figure_export+color_palettes 不重造 | PDF+PNG(真 file.exists) | | figure_contract.py | 核 palette↔变量语义、中点、面积编码、R strict、result card/evidence_strength 绑定、n/analysis set/uncertainty、最终 mm、CVD/灰度与 build hashes;最终 output 必须存在且 hash 匹配 | PASS/UNRESOLVED/FAIL | | validate_plan_card.py | 规划卡契约校验(栏宽键 LIVE 读 figure_export/figure_id 唯一/source_card) | 校验 |
owner_skill=RESULT-ANALYSIS 且 build.inputs.result_card hash 一致吗?WARN 的 claim_impact 是否进入 caption_facts.guardrail_claim_impact?light.figure_build.v1 暴露 mapping/stat/scales/coord/facet/device,规格↔构建↔caption 门通过?light.figure_build.v1 的 outputs[].path 是包内相对路径吗?真实文件存在且 sha256 与文件字节一致吗?manifest 没泄漏本机绝对路径吗?visual_honesty_gate(无 critical)?AXIS_TRUNCATE 抓「ylim≠0 且无断轴标注」,但截断可能完全合理(Correll 2019《Truncating Y-Axis: Threat or Menace?》实证);TWIN_AXIS 抓 twinx 存在,双轴有时正当。→ critical 默认 阻断,真误导终判需图注+人/审稿人,正当者经 run_checkpoint 授权 FAIL→PASS 记 notes(spec §6)。
claim_id 精确匹配,否则 claim 文本语义相似(≥0.6)匹配;无匹配→证据档未知→不 flag(保守,少误报 critical)。精确逐图需规划卡写 claim_id。
pixel_review_done=False。r_ggplot.py --detect 探测 Rscript+requireNamespace("ggplot2")+requireNamespace("scales"));探测不到 → r_advisory 明确缺什么与三选项(继续 matplotlib 诚实降级 / 安装或配置 R+包 / 提供 Rscript 路径)。不得擅自安装 R 或 R 包;交互场景先问用户,非交互才降级并标 degraded=True,绝不假装出了 ggplot 图。R 一律写 .R 文件再 Rscript file.R(不用 -e 内联:Windows 引号/\n 会被吃乱码);探针/自测临时 .R 文件放仓库 .upgrade/_e2e;selftest 真出一张图验 file.exists,非写完 R 代码字符串就算。misrepresent_evidence,10 同类零覆盖) + 9→7 回炉 + 集合预算——同类全是 prose 规则 + refusal 启发 + 人工 checklist。见 truth_source §0.A/§0.C。| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-13 | pass→pass | 8,589 | 5,475 | -36% | 1 | 1 | 0% | 1,287 | 7,705 | +499% | 0 | 0 | — |
case-18 | pass→pass | 8,038 | 12,202 | +52% | 1 | 1 | 0% | 1,239 | 8,714 | +603% | 0 | 0 | — |
case-01 | fail→fail | 24,148 | 6,832 | -72% | 1 | 1 | 0% | 4,796 | 7,443 | +55% | 0 | 0 | — |
case-02 | fail→fail | 20,498 | 5,926 | -71% | 1 | 1 | 0% | 3,435 | 7,200 | +110% | 0 | 0 | — |
case-03 | fail→fail | 22,104 | 5,820 | -74% | 1 | 1 | 0% | 3,406 | 7,224 | +112% | 0 | 0 | — |
case-04 | fail→pass | 17,364 | 16,545 | -5% | 1 | 1 | 0% | 2,977 | 9,628 | +223% | 0 | 0 | — |
case-05 | pass→pass | 12,367 | 11,672 | -6% | 1 | 1 | 0% | 2,149 | 8,829 | +311% | 0 | 0 | — |
case-06 | pass→pass | 11,727 | 12,038 | +3% | 1 | 1 | 0% | 1,784 | 8,631 | +384% | 0 | 0 | — |
case-07 | pass→pass | 12,486 | 14,474 | +16% | 1 | 1 | 0% | 1,748 | 9,078 | +419% | 0 | 0 | — |
case-08 | pass→pass | 17,291 | 14,992 | -13% | 1 | 1 | 0% | 2,392 | 9,165 | +283% | 0 | 0 | — |
case-09 | pass→pass | 12,940 | 9,829 | -24% | 1 | 1 | 0% | 1,993 | 8,376 | +320% | 0 | 0 | — |
case-10 | pass→pass | 4,153 | 6,034 | +45% | 1 | 1 | 0% | 581 | 7,816 | +1245% | 0 | 0 | — |
case-11 | fail→pass | 16,482 | 15,458 | -6% | 1 | 1 | 0% | 2,740 | 9,537 | +248% | 0 | 0 | — |
case-12 | fail→pass | 7,156 | 5,014 | -30% | 1 | 1 | 0% | 1,075 | 7,702 | +616% | 0 | 0 | — |
case-14 | pass→pass | 17,108 | 14,171 | -17% | 1 | 1 | 0% | 2,600 | 9,227 | +255% | 0 | 0 | — |
case-15 | pass→pass | 3,005 | 4,301 | +43% | 1 | 1 | 0% | 423 | 7,488 | +1670% | 0 | 0 | — |
case-16 | pass→pass | 12,013 | 9,189 | -24% | 1 | 1 | 0% | 1,666 | 8,156 | +390% | 0 | 0 | — |
case-17 | pass→pass | 14,265 | 17,428 | +22% | 1 | 1 | 0% | 2,370 | 9,661 | +308% | 0 | 0 | — |
case-19 | fail→pass | 16,987 | 12,207 | -28% | 1 | 1 | 0% | 2,484 | 8,773 | +253% | 0 | 0 | — |
case-20 | pass→pass | 14,387 | 14,674 | +2% | 1 | 1 | 0% | 2,700 | 9,686 | +259% | 0 | 0 | — |
case-21 | pass→fail | 9,335 | 23,803 | +155% | 1 | 1 | 0% | 1,257 | 10,716 | +753% | 0 | 0 | — |
case-22 | pass→pass | 11,810 | 18,667 | +58% | 1 | 1 | 0% | 1,729 | 9,730 | +463% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +14 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.