Community图像github.com

wxx827/scientific-figures

1219 个即用型 Matplotlib 生成器,用于生成达到出版物质量的科学图表,基于强制 Times New Roman 设计系统,附赠兼容度量回退字体和检查 PDF 内嵌字体的版式检查工具。涵盖核心统计图表、地理空间制图、机器学习、生物组学、气候等多个学科。

scientific-figures 是什么?

该技能是一个包含 1219 个可独立运行的 Matplotlib 脚本的集合,专门用于生成达到出版物质量的科学图表。所有脚本遵循统一的设计系统:强制使用 Times New Roman 字体(附赠 Tinos 作为度量兼容的回退字体),采用薄暗色轴线、柔和饱和调色板、紧凑多面板网格,并以 300 DPI 导出 PNG。每个脚本都是自包含的,运行无需额外参数,会自动生成合成数据并输出到 output/ 目录。技能提供了详尽的目录系统(catalog/INDEX.md 将 1219 个图表分为 135 个组),帮助用户按学科或图表类型快速定位所需脚本;同时拥有完整的版式检查工具(check_typography.py 可验证 PDF 内嵌字体)和批量运行支持(run_all.py 支持并行和局部运行)。它还通过 plot_data.py 提供了一个“前门”接口,可将设计系统直接应用到用户提供的 CSV/XLSX 数据表上,支持 14 种图表类型、自动编码检测和 CJK 字体适配,极大降低了使用门槛。该技能适用于 Claude Code、Cursor、Codex 等 AI 编码代理,帮助研究人员和数据科学家快速生成专业水平的科学图表。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wxx827/paper-figures-skill/tree/HEAD/.cursor/skills/scientific-figures

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

科学图表(达到出版物质量)

1219 个即用型 Matplotlib 生成器,编号从 0 到 1218,可复现高价期刊的图表美学:全程使用 Times New Roman 字体、细深色轴线、柔和饱和调色板、紧凑多面板网格、阈值和指标注释、边缘密度图以及 300 DPI 导出。

每个脚本都是自包含的。无需任何参数即可运行,会自动生成合成数据,并以自身编号为名将 PNG 写入 output/ 目录。

cd scripts
python fig_threshold_regression.py     # -> output/01_threshold_regression.png

查找合适的图表

不要阅读此文件来查找图表名称;目录已拆分,因此您只需加载所需部分。

  1. 阅读 catalog/INDEX.md — 135 个组,每个组对应一个学科或图表家族,并附有编号范围。
  2. 阅读与之匹配的单个组文件。每个文件会列出该范围内所有图表及其绘制内容和适用场景。
  3. 在改编前阅读该脚本。

当已经知道图表名称时,可跳过索引直接搜索所有组:

grep -ril "sankey" catalog/
grep -ril "生存曲线\|kaplan" catalog/

要在运行之前查看图表外观,请打开 reference/thumbs/<number>_<name>.jpg — 所有 1219 个缩略图都在那里,已缩小尺寸。reference/curated/ 中保存了 33 个全分辨率版本。

如果目录中没有合适的图表,请从通用组(0-54)开始:分布图、相关图、回归图、排名图、组成图和时间序列图,形式适用于任何学科。

字体:首次运行前请阅读

主要字体是 Times New Roman。它是专有字体,未随附;fonts/ 目录携带了 Tinos(SIL OFL 许可),它具有字节级相同的递进宽度,因此无论机器是否安装了正版字体,图表的布局都是一致的。在信任任何输出之前,请先确认字体堆栈解析正确:

cd scripts
python check_typography.py --metrics
#   vs Tinos              identical    (Tinos-Regular.ttf)

如果 Matplotlib 回退到 DejaVu,set_pub_style() 会抛出错误而非静默降级——错误的字体对于所有基于 PNG 的检查都是不可见的。详情请参阅 fonts/README.md。

依赖要求

每个图表都需要 matplotlib>=3.6 和 numpy;部分图表和工具还需要 scipy、pandas、seaborn、scikit-learn、openpyxl 和 Pillow。要求 3.6 版本很重要:逐字符的字体回退机制允许中文标签借用宋体,同时数字仍保持 Times 字体。

pip install -r requirements.txt

共享样式:scripts/pubstyle.py

在任何新图表中导入此模块以匹配美学风格:

from pubstyle import (set_pub_style, PALETTES, savefig, style_axes,
                      panel_title, add_figure_header, header_height,
                      panel_labels_inches)

set_pub_style()                       # 一次性应用 rcParams;永远不要手动修改
fig, axes = ...                       # 构建你的图表
panel_title(axes[0], "随时间的漂移幅度")

head = header_height(fig, subtitle=True)
fig.tight_layout(rect=[0, 0.03, 1, 1 - head / fig.get_size_inches()[1]])
add_figure_header(fig,
                  "循环闭合消除了无界漂移",   # 结论
                  subtitle="n = 240 条轨迹,8 个序列")
panel_labels_inches(fig, axes)        # (a) (b) (c) 以相等的英寸偏移量排列

savefig(fig, "my_fig.png")            # 以 300 DPI 导出到 output/

尺寸来自 pubstyle.TYPE_SCALE,因此当这些辅助函数能为您完成时,请不要传递 fontsize= 参数。PALETTES 中的关键调色板:teal_rust、blue_red、greens、earth、div_rdbu、pastel4、zones,以及色盲友好的 cb_* 渐变。请重复使用这些调色板,而不是 Matplotlib 的默认调色板——它们正是让图表看起来昂贵的原因。

scripts/figkit.py 是配套的构建层:缩放插图、文本卡片、基于英寸的坐标轴、防重叠标签放置。

适配真实数据

如果数据是表格,请不要从这些脚本开始。 请改用前门接口,它将整个设计系统应用于您的文件:

cd scripts
python plot_data.py --data yours.csv --describe    # 我能绘制什么?
python plot_data.py --data yours.csv --kind scatter_fit --x a --y b --group g

支持十四种图表类型、编码和分隔符检测、自动将 "1,234" 和 "12.5%" 转换回数字、针对中文列名的自动 CJK 字体选择,以及 .xlsx 和 .csv 格式。

要适配 1219 个生成器之一,首先找出其数据所在位置:

python plot_data.py --contract fig_threshold_regression.py

这些脚本在这方面并不统一。在 1219 个脚本中,19 个将数据隔离在 gen_data() 函数中,299 个将数据保存在其他需先读取的命名函数中,656 个在 main() 内部内联构建数据,245 个没有可替换的数据,因为图表本身就是一个模型——例如 Kaimal 谱、卡尔曼滤波器、合成显微镜场景。--contract 报告会说明属于哪种情况,并指出值得修改的常量。

无论编辑哪个脚本,请保留绘图和样式代码。样式是宝贵部分;不要用 Matplotlib 的默认值重写它。

美学规则(是什么让它们看起来昂贵)

  1. 隐藏顶部和右侧的轴线;保持轴线细(0.8)和深灰色(#333),不要用黑色。
  2. 全程使用 Times New Roman,字号小(正文 7-9 pt,硬下限 6.0 pt),仅对图表标题、面板字母和面板标题使用粗体。
  3. 使用柔和饱和调色板对(青色/锈色、蓝色/红色)——切勿使用纯 RGB 颜色。
  4. 在空间允许的情况下,为散点图添加边缘密度图或直方图。
  5. 在带薄边框的圆角白盒中注释统计信息;将阈值文本放在强调色中。
  6. 使用 tight_layout(h_pad, w_pad) 实现密集的多面板网格;共享图例。
  7. 使用 bbox_inches="tight" 以 300 DPI 导出(由 savefig 处理)。

DESIGN_SYSTEM.md 包含每条规则背后的强制执行数字。

验证

打开 output/ 中的 PNG 并将其与请求进行比较。如果面板拥挤,请增大 figsize 或 h_pad/w_pad;如果颜色冲突,请切换到单个 PALETTES 条目。

读取 PNG 无法判断使用了哪种字体,因为 PNG 不存储字体元数据。请同时运行版式审核——它会渲染为 PDF 并读取渲染器嵌入的字体:

cd scripts
python check_typography.py              # 错误必须为零
python check_figures.py --jobs 8        # 运行所有内容,审核每个 PNG
python run_all.py --parallel 8          # 重建所有 1219 个(大约 15 分钟)
python run_all.py --range 173-192       # 仅遥感模块
python run_all.py --parallel 8 --vector # 每个 PNG 旁生成 PDF,用于投稿

相关文档

  • catalog/INDEX.md — 135 个组及其编号范围。
  • DESIGN_SYSTEM.md — 跨图表的视觉标准(画布大小、调色板、字体比例、间距、禁止使用的色图)。在编写新图表或编辑现有图表前请阅读。
  • WORKFLOW.md — 操作手册:选择生成器、替换真实数据、使用 new_figure.py 搭建新图表、运行质量检查。SKILL.md 回答哪个图表;WORKFLOW.md 回答如何使用它。
  • scripts/reference.md — 完整的 pubstyle API。
  • fonts/README.md — 为何在此提供字体、提供了哪个字体及其许可信息。
  • NUMBER_REGISTRY.md — 哪些编号范围已被占用。新图表从 1219 开始。

相关技能