AgentStack
SKILL verified MIT Self-run

Light Figure Drawing

skill-light0305-light-skills-light-figure-drawing · by Light0305

从顶会大牛角度进行专业绘图与组图。当用户需要把规划好的图实际画出来时使用。按情况用 Python(matplotlib/seaborn/plotly/altair)、R(ggplot2)、MATLAB、Visio、Origin、LaTeX/TikZ、Illustrator、PowerPoint 等。审美统一、专业清晰、配色合理、字体规范、线条清楚、高分辨率,适合直接投稿。不仅画图,还从论文表达角度判断怎么排、怎么组、怎么标注、怎么突出重点。

No reviews yet
0 installs
9 views
0.0% view→install

Install

$ agentstack add skill-light0305-light-skills-light-figure-drawing

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Light Figure Drawing? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

专业绘图与组图

工具选择(按图类型,附核心调用)

  • 统计图/可复现图(首选):
  • matplotlib:最可控。组图 plt.subplots(figsize=(7,5), constrained_layout=True),不规则布局用 GridSpec(跨格 gs[0,:])。
  • seaborn:统计/分布/分类图。sns.set_theme(style="ticks", context="paper", palette="colorblind") + sns.despine();分面拼图用 figure-level(relplot/catplotcol=/row=),手动拼图用 axes-level(scatterplot(ax=...))。
  • plotly:交互/3D,静态投稿 fig.write_image("f.pdf", scale=3)(需 kaleido),template="simple_white"
  • altair:声明式、可复现强。chart.save("f.svg", scale_factor=3)(需 vl-convert-python),拼图用 c1 | c2 / c1 & c2
  • ggplot2(R)+ theme_classic() + scale_color_viridis_d(),拼图用 patchworkp1+p2plot_annotation(tag_levels="a") 自动标号)。
  • 框架图/流程图/结构图:
  • Graphviz(自动布局):digraph{rankdir=LR; node[shape=box,style=rounded]; A->B},选对引擎 dot(分层)/neato(无向)/fdp(大图),rank=same 对齐同层。
  • TikZ/PGFPlots(字体与正文统一):\begin{axis}...\addplot table{data.dat};,导言区 \pgfplotsset{compat=1.18} 统一样式,大图用 external 库缓存。
  • Mermaid(文档/初稿):graph TD; A[框]-->|标签|B{判断}mmdc -i in.mmd -o out.svg 导出。
  • Draw.io(要可编辑矢量源 + 可版本控制的系统/架构图):.drawio 即 mxGraph XML,可程序化生成;有官方 jgraph/drawio-mcp(diagram-as-code,AI 可生成/改图),CLI drawio --export --format pdf/svg 出图。比 Graphviz 自动布局更可控、比 Mermaid 表达力强(与 m09 figure-planning 列的首选对齐;配置见 README 推荐 MCP 表)。
  • 精修拼版:Illustrator / Inkscape。
  • 精细科学图/期刊曲线:
  • Origin:Export Graphs 按出版商精确设 Width/Height+DPI(TIFF 600dpi),可 Export as AI 转 Illustrator;.otp 模板固化风格。
  • MATLABexportgraphics(ax,"f.pdf","ContentType","vector") 出矢量、"Resolution",600 出位图;组图用 tiledlayout + nexttileTileSpacing="compact")。
  • 示意/机制图/graphical abstract:生命科学图标库可用 BioRender 手工做(注意导出授权与分辨率;其官方 MCP 仅查询不能作图,故只手工用、非程序化路径)。
  • 3D 结构/分子/科学可视化:Blender(开源,程序化建模渲染非 AI 生图;成熟路子用 Molecular Nodes/SciBlend 等插件,有社区/官方 MCP 但驱动科研可视化尚属探索);3D 渲染作论文图须数据真实可复现并标渲染参数,详见 m09 figure-planning references「Blender」节。
  • 组图/排版:matplotlib subplots/GridSpec、Illustrator(图层+画板对齐)、python-pptx(add_picture(..., width=Inches(3)),layout[6] 空白页)。

优先可复现(代码)方案,便于改数据重出;最终精修/拼大图再进 Illustrator/Inkscape。具体决策同 a09。

一行套刊样式与导出脚本(本技能自带资产)

  • 样式plt.style.use("assets/publication.mplstyle") 是通用底;按刊叠加 plt.style.use(["assets/publication.mplstyle","assets/nature.mplstyle"])(或 science.mplstyle)。三者均为 Okabe-Ito 色盲安全色环 + 无衬线 + 矢量文字可编辑(pdf/ps fonttype42、svg 不转曲)。
  • 导出scripts/figure_export.py
  • save_publication_figure(fig, basename, formats=("pdf","png","svg"), dpi=600) 多格式 + DPI,自动建目录、强制文字可编辑。
  • save_for_journal(fig, basename, journal, column) 按刊规格设物理尺寸(mm→in)再导出,返回 (paths, info)
  • check_figure_size(fig, journal=, column=) 校验栏宽(mm)与最小字号(pt),measured=True,path= 还能读回落盘文件实测宽度复核 bbox tight 静默裁剪。
  • check_scaled_fonts(fig, journal=, column=) 校验「大尺寸画再缩小到栏宽」后的有效字号——仅对"先大画布作图再缩到栏宽"工作流有意义;若已用 save_for_journal 设精确栏宽(scale≈1),它必报"无风险",是预期空操作不是 bug,standard 流程无需再跑。
  • check_export_compliance(path, journal, column=) 消费此前闲置的规格字段:实测 dpi≥mindpi、文件体积≤maxfilemb、高度≤maxheightpx、格式∈preferredformats(位图读 Pillow,矢量/无 Pillow 跳过不臆断)。
  • save_for_journal 导出前检字体落空:rcParams 首选 Arial/Helvetica 在 Linux/CI 不可用会静默回退 DejaVu,回退即打 WARNING 并入 info["font"],让"字体与正文一致"可验证。
  • JOURNAL_SPECS 内置逐刊规格字典(含 verified 标记)。
  • 配色scripts/color_palettes.py
  • OKABE_ITO / OKABE_ITO_LIST 8 色常量;sequential_cmap() / diverging_cmap() / discrete_cmap()apply_palette() 设当前色环。
  • to_grayscale()simulate_cvd(kind=deuteranomaly/protanomaly/tritanomaly)preview_palette() 出原色/灰度/三种色盲对照图。有 colorspacious 走精确算法,缺则自动降级线性近似(cvd_backend() 可查)。
  • 诚实性 lintscripts/figure_integrity_lint.py —— 静态扫绘图代码,提示常见误导:y 轴偷偷截断(含 set_ylim(bottom=) 关键字形式)、双 y 轴伪相关、bar/sns.barplot 无误差棒、误差棒未注明类型(.std() 数据计算不再被误当类型声明)、jet/rainbow 色图、3D 扭曲。python scripts/figure_integrity_lint.py --file plot.py(含 --selftest)。对照反例教材 examples/bad_figure_example.py(故意违规、可端到端命中多条)。规范见 references/figure_integrity.md。只提示不阻断,最终判断交作者。局限:仅覆盖 matplotlib/seaborn 静态正则,plotly/altair/ggplot2/MATLAB 链路的诚实性不被检查,那些需人工对照 figure_integrity.md。
  • 示例(均可 python examples/xxx.py 跑通,Agg 存图):
  • example_matplotlib_multipanel.py:GridSpec 不规则布局 + (a)(b)(c) 标号 + 误差棒 + 显著性星标。
  • example_seaborn_stats.py:箱线/小提琴/条形统计对比 + despine。
  • example_framework.dot + example_framework_render.py:Graphviz 框架图,有 dot 二进制则渲染,否则降级 matplotlib 块图。

逐刊硬规格表(栏宽 mm + DPI + 格式 + 字号下限)

> 栏宽数字唯一真相源 = scripts/figure_export.pyJOURNAL_SPECS;下表为其人读镜像,若与脚本不一致以脚本为准(改数字只改脚本)。verified=实测:已 curl 该刊作图规格页并记 HTTP 码;其余为依公开指南整理但本次未逐项实测(多因付费墙/反爬 403),投稿前请以目标刊"最新"作者须知为准。

| 期刊 | 单栏宽 | 双栏/整版宽 | 字号下限 | 线条 DPI | 半调/照片 DPI | 首选格式 | 实测 | |---|---|---|---|---|---|---|---| | Nature | 89 mm | 183 mm | 5 pt(面板标 8pt 粗体 a,b,c;正文 ≤7pt) | 600 | 300–600 | PDF/TIFF/EPS(文字勿转曲,Helvetica/Arial) | ✅ HTTP200 | | PLOS | 83 mm | 140 mm(1.5栏) / 190 mm | 8 pt(8–12pt,Arial/Times/Symbol) | 600 | 300–600 | 仅 TIFF/EPS;789–2250px@300dpi, custom 逃生通道:尚未进上表的刊(如中文刊)用 save_for_journal(fig, base, journal="custom", custom_width_mm=86.0) 直接传物理栏宽(mm),校验同理 check_figure_size(fig, journal="custom", custom_width_mm=86.0)栏宽数据须有来源(db01 卡或实测记录),禁止臆测。中文刊实测栏宽已落 db01 risk_note(2026-06-11,pdfplumber 实测):农业工程学报 单栏 86 / 整页 180;中国农业科学、作物学报 单栏 81 / 整页 170;农业机械学报 待核查(PDF 入口被反爬拦截)。

数值与 JOURNAL_SPECS 同源,可在代码里直接读取(如 figure_export.JOURNAL_SPECS["nature"])。

审美与规范(投稿级)

  • 配色:色盲友好——matplotlib/seaborn 用 viridis/cividis/colorblind,R 用 scale_*_viridis,连续数据避免 jet/rainbow。同一论文统一调色板(登记 db07);项目有 databases/db09-projects/projects//palette.json 则必用其取色(与 PPT/前端共享的视觉 SSOT 实例,主色/强调/语义色照取,不另起一套;schema 见 db09 README),无则按 db07 卡推荐配色。不超过必要颜色数(离散 ≤8 类,超出手动指定)。
  • 字体:与正文一致(常 Times/Arial);字号在缩放后仍可读(≥6–8pt)。seaborn 用 context="paper" 整体定字号;按目标栏宽设物理尺寸(单栏≈3.5in、双栏≈7.2in),避免投稿后被缩放失真。
  • 线条/标记:区分清楚,黑白打印仍可辨(线型 linestyle + 标记 marker 双重区分,不仅靠颜色);线宽用绝对值(pt)。
  • 分辨率/格式:矢量优先(PDF/SVG/EPS);位图线条图 ≥600dpi、含照片 ≥300dpi。文字保持可编辑便于二次精修:matplotlib 设 rcParams["pdf.fonttype"]=42;R 用 device=cairo_pdf;MATLAB 用 exportgraphics ContentType=vector。EPS 不支持透明,要透明背景用 PDF/SVG。
  • 元素:坐标轴标签+单位、图例、误差棒、显著性标记,去 chart junk(多余网格/边框,sns.despine()theme_classic())。
  • caption:自洽,能独立读懂。

组图逻辑

  • 同类对齐、共享坐标/色标、统一尺寸。matplotlib 用 constrained_layout 自动对齐共享色标;ggplot 用 facet_* 或 patchwork;MATLAB 用 tiledlayout
  • 子图编号(a)(b)(c),标题精简。patchwork tag_levels="a" 可自动标号。
  • 用留白和分组体现层次,突出主结果。
  • 拼最终大图:各子图导出矢量(SVG/PDF) → Illustrator/Inkscape 置入 → 图层管理 + Align 对齐 + 统一字体线宽 → 加标号 → 按期刊要求导出(PDF/EPS/TIFF,印刷常 CMYK)。命令行拼/转格式可用 Inkscape 1.x --export-type / --actions

投稿前自查清单

  • 物理尺寸=目标栏宽?字号缩放后 ≥6–8pt?
  • 颜色色盲安全?黑白打印可辨(线型+标记)?
  • 矢量输出且文字可编辑(fonttype42 / svg.fonttype=none / cairo_pdf / vector)?位图 dpi 达标?
  • 坐标轴有标签+单位?图例/误差棒/显著性标记齐全?去除 chart junk?
  • 诚实性(不误导,审稿人必查):详见 references/figure_integrity.md,可跑 scripts/figure_integrity_lint.py 扫绘图代码。要点:误差棒在 caption 注明是 SD/SEM/95%CI 并写明 n=;y 轴截断必须显式标断点(不偷偷截断放大差异);慎用双 y 轴(易制造伪相关,能拆分就拆分);小样本优先散点/箱线展示原始分布,别用 bar 掩盖分布;坐标轴范围不为夸大效果而人为收紧/放大。
  • AI 生成图像(2026 投稿红线):本图是否用生成式 AI(DALL·E/Midjourney/SD/GPT Image 等)生成或篡改?数据图绝对禁止——Nature/Science/Elsevier 三家头部出版商一律禁止 AI 生成论文图像,唯一例外是「AI 本身是研究对象/方法」(须 methods 可复现披露)。论文图走自有 mplstyle 数据驱动绘制;m16 的 R6 生图流水线只服务 PPT/前端、严禁进论文图链路。政策细节与各家口径差异见 references/figure_integrity.md「AI 生成图像政策」节。
  • 全论文调色板/字体/线宽一致(对照 db07)?

工作方式

按 m09 的规划卡(light-figure-planning/templates/figure_plan_card.md,叙事层+规格层双层字段)逐图实现:给出可运行代码或源文件 + 预览说明 + 设计理由。读卡的上层叙事确认这张图绑的 claim 与组图角色,读下层规格的 source_card/target_journal/column 照卡执行。需要数据时回 m06/m02 取。多次打磨直到达到顶会观感。

  • 先读 source_card(必填):规划卡必须带 source_card,指向 databases/db07-figures/resources_real.md::figure_typedatabases/db07-figures/figure_advanced_cards.md::figure_typefigure_cards.md 只是模板索引,不能作为实体执行来源;只有 source_card: new_canonical_candidate -> databases/db07-figures/resources_real.md(或 databases/db07-figures/figure_advanced_cards.md)才表示需新增可复用模式并回写 db07。
  • 输入字段分层:db07 基础字段控制图表模式(figure_type/purpose/data_required/layout/...);项目执行字段控制交付(figure_id/target_journal/column/caption_draft/output_formats)。不要把单个项目的 F1/F2、caption、导出路径回写成 db07 实体卡。
  • 栏宽不臆测:直接读规划卡的 target_journalcolumn 字段,原样传给 save_for_journal(fig, basename, journal=target_journal, column=column)——物理栏宽 mm、figsize、最小字号全由 JOURNAL_SPECS 锁定。规划卡缺这两字段时回规划技能(light-figure-planning)补,不要自行猜测栏宽(猜错整张图物理尺寸作废)。column 取值须为该刊实有键(single/double/full/onehalf)。JOURNAL_SPECS 现含 nature/science/cell/plos/ieee/elsevier/mdpi 七键;表外刊(如中文刊)走 journal="custom"+custom_width_mm= 逃生通道,栏宽数据须有来源(db01 卡或实测记录),禁止臆测
  • 导出后必检:每张图导出后运行 check_figure_size(fig, journal=target_journal, column=column, measured=True, path=) 复核实测物理宽度,并跑 check_export_compliance(path, journal, column) 查 dpi/体积/格式/高度合规;save_for_journal 已自动检字体落空(看 info["font"])。check_scaled_fonts 只在"手动大画布作图再缩放"工作流才需要——用 save_for_journal 设精确栏宽时它必报无风险,可跳过。若代码图涉及误差棒、截断轴、双 y 轴、jet/rainbow 等,再用 scripts/figure_integrity_lint.py --file 做诚实性检查。

产出

图文件(矢量+位图) + 生成代码/源文件 + 项目风格说明(写入仓库根目录下的 databases/db09-projects/projects//version_history.md,供 a07 统一) + figure manifest(落到仓库根目录下的 projects//figures/manifest.md)。只有新增了跨项目可复用的图表模式,才回写 db07 canonical 文件。

  • figure manifest:交付 m07 的单一工件,把"图文件↔图号↔caption"绑定。逐图一项,含:figure_id(沿用 m09 规划卡的 F#/T# 编号,与 m07 模板 [图位 F1]/[表位 T1] 占位对齐) + source_card + 图片文件路径(矢量+位图) + 最终 caption + 放置章节 + target_journal/column + 导出/字号检查结果。m07 据此把占位替换为实图与图号,无需回查规划卡。

示例: ```yaml

  • figure_id: F1

sourcecard: databases/db07-figures/resourcesreal.md::模型框架图(architecture) files: vector: figs/framework.pdf bitmap: figs/framework.png caption: "图1. 方法整体框架:左输入经解耦表征模块……" section: 方法-框架 targetjournal: nature column: single checks: figuresize: pass scaled_fonts: pass ```

衔接

受 m09 驱动;交 m12 排版插入;风格一致性由 a07 跨图维护。 专利附图:受 m15(light-ip-application) 委托绘制时,按 references「专利附图规范」节执行——黑白矢量线条、图号编排、附图标记线不交叉、流程图/框图术语与权利要求一致,不套论文数据图配色。


各工具真实 API/参数/导出命令/已知坑的逐条笔记见 references.md。

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.