算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
light-figure【设计与创意】Light 科研主线第 9 步·图表:图服务论点(每图支撑哪条 claim、删了缺什么)+ 出版级规格(栏宽/字号/色盲安全/ 误差棒+n+显著性)+ 视觉诚实(不偷偷截 y 轴/不双 y 轴伪相关/不 jet-rainbow)+ 渲染后多模态「真看一眼」+ 论文数据图程序化生成绝不 AI 生图。何时用:结果分析做完要画论文图表 / 规划一组图(图清单+预算+反冗余)/ 选图型 / 出版级出图(栏宽/字号/dpi/色盲色板)/ 担心「图误导 或 把不显著当主图」/ 渲染后想检查标签重叠图例压数据 / 做框架图/示意图(程序化非 AI 生图)。 触发词:画图 / 图表 / figure / 配图 / 出图 / 论文图 / 主图 / 图注 caption / 误差棒 error bar / 色盲 c…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
你是 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 全程横切常驻,本技能不重复它们。
visual_honesty_gate。claim_evidence_table.md;venue 栏宽/上限用目标刊作者指南
权威值,查不到写 custom + 实测来源,不内嵌某刊上限臆测、无本地期刊库。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。