mcpField
A
alterlab-scientific-viz

alterlab-scientific-viz

github.com/alterlab-ieu数据与数据库7871 次安装5 周前更新
代码仓库

关于 alterlab-scientific-viz

用于制作科学论文图表的技能,面向研究者和准备期刊投稿的作者。它汇集期刊样式、无障碍配色、多面板布局、尺寸检查和多格式导出流程,并支持 matplotlib、seaborn 与 plotly。

主要功能

  1. 01应用期刊专用图表样式
  2. 02制作多面板图表
  3. 03使用色觉友好配色
  4. 04检查图表尺寸与可读性
  5. 05导出 PDF、EPS、TIFF 等格式

适用场景

  1. 01准备期刊投稿图表
  2. 02统一论文中多幅图的样式
  3. 03制作适合灰度打印的图表
  4. 04按期刊要求检查并导出图像

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-scientific-viz

安装后在 Claude Code 中输入/alterlab-scientific-viz确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
color_palettes.py
nature.mplstyle
presentation.mplstyle
publication.mplstyle
evals/
evals.json
references/
color_palettes.md
common_tasks.md
journal_requirements.md
matplotlib_examples.md
publication_guidelines.md
seaborn_in_publications.md
scripts/
figure_export.py
style_presets.py

详细介绍

科学可视化

概述

科学可视化将数据转化为清晰、准确的图表,用于发表。创建符合期刊发表要求的图表,包含多面板布局、误差线、显著性标记和色盲友好型配色方案。使用 matplotlib、seaborn 和 plotly 为稿件导出 PDF/EPS/TIFF。

何时使用此技能

在以下情况下应使用此技能:

  • 为科学论文创建图表或可视化内容
  • 准备期刊投稿图表(Nature、Science、Cell、PLOS 等)
  • 确保图表对色盲人士友好且易于访问
  • 创建样式一致的多面板图表
  • 以正确的分辨率和格式导出图表
  • 遵循特定的出版规范
  • 改进现有图表,使其符合出版标准
  • 创建同时适用于彩色和灰度显示的图表
不适用的情况
场景改用
从头构建自定义图表,或调整单个图形元素和 rcParamsalterlab-matplotlib
快速绘制探索性统计图(成对关系图、分布图)以目测数据alterlab-seaborn
带悬停/缩放功能的交互式图表或 Web 仪表板alterlab-plotly
校对已完成的图表:数据保真度、标签重叠、300-dpi 导出检查alterlab-figure-qa
示意图、流程图或通路图alterlab-scientific-schematics

快速入门指南

基本的出版级图表
import matplotlib.pyplot as plt
import numpy as np

# Apply publication style (from scripts/style_presets.py)
from style_presets import apply_publication_style
apply_publication_style('default')

# Create figure with appropriate size (single column = 3.5 inches)
fig, ax = plt.subplots(figsize=(3.5, 2.5))

# Plot data
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')

# Proper labeling with units
ax.set_xlabel('Time (seconds)')
ax.set_ylabel('Amplitude (mV)')
ax.legend(frameon=False)

# Remove unnecessary spines
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# Save in publication formats (from scripts/figure_export.py)
from figure_export import save_publication_figure
save_publication_figure(fig, 'figure1', formats=['pdf', 'png'], dpi=300)
使用预配置样式

使用 assets/ 中的 matplotlib 样式文件应用期刊专属样式:

import matplotlib.pyplot as plt

# Option 1: Use style file directly
plt.style.use('assets/nature.mplstyle')

# Option 2: Use style_presets.py helper
from style_presets import configure_for_journal
configure_for_journal('nature', figure_width='single')

# Now create figures - they'll automatically match Nature specifications
fig, ax = plt.subplots()
# ... your plotting code ...
使用 Seaborn 快速入门

对于统计图表,使用带有出版样式的 seaborn:

import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style

# Apply publication style
apply_publication_style('default')
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind')

# Create statistical comparison figure
fig, ax = plt.subplots(figsize=(3.5, 3))
# seaborn >=0.13: pass hue + legend=False to color by category
# (a bare palette= without hue= is deprecated, slated for removal in v0.14)
sns.boxplot(data=df, x='treatment', y='response',
            order=['Control', 'Low', 'High'],
            hue='treatment', palette='Set2', legend=False, ax=ax)
sns.stripplot(data=df, x='treatment', y='response',
              order=['Control', 'Low', 'High'], 
              color='black', alpha=0.3, size=3, ax=ax)
ax.set_ylabel('Response (μM)')
sns.despine()

# Save figure
from figure_export import save_publication_figure
save_publication_figure(fig, 'treatment_comparison', formats=['pdf', 'png'], dpi=300)

核心原则和最佳实践

1. 分辨率和文件格式

关键要求(详见 references/publication_guidelines.md):

  • 栅格图像(照片、显微图像):300-600 DPI
  • 线条图(图表、绘图):600-1200 DPI 或矢量格式
  • 矢量格式(首选):PDF、EPS、SVG
  • 栅格格式:TIFF、PNG(科学数据切勿使用 JPEG)

实现方式:

# Use the figure_export.py script for correct settings
from figure_export import save_publication_figure

# Saves in multiple formats with proper DPI
save_publication_figure(fig, 'myfigure', formats=['pdf', 'png'], dpi=300)

# Or save for specific journal requirements
from figure_export import save_for_journal
save_for_journal(fig, 'figure1', journal='nature', figure_type='combination')
2. 颜色选择——色盲友好

始终使用色盲友好型配色方案(详见 references/color_palettes.md):

推荐:Okabe-Ito 配色方案(各类色盲人士均可区分):

# Option 1: Use assets/color_palettes.py
from color_palettes import OKABE_ITO_LIST, apply_palette
apply_palette('okabe_ito')

# Option 2: Manual specification
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
             '#0072B2', '#D55E00', '#CC79A7', '#000000']
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=okabe_ito)

对于热图/连续数据:

  • 使用感知均匀的颜色映射:viridis、plasma、cividis
  • 避免使用红绿发散色图(改用 PuOr、RdBu、BrBG)
  • 切勿使用 jet 或 rainbow 颜色映射

始终在灰度模式下检查图表,确保其易于解读。

3. 字体和文本

字体指南(详见 references/publication_guidelines.md):

  • 无衬线字体:Arial、Helvetica、Calibri
  • 最终印刷尺寸下的最小字号:
    • 坐标轴标签:7-9 pt
    • 刻度标签:6-8 pt
    • 面板标签:8-12 pt(粗体)
  • 标签使用句首字母大写格式:“Time (hours)”,而非“TIME (HOURS)”
  • 始终在括号中注明单位

实现方式:

# Set fonts globally
import matplotlib as mpl
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = ['Arial', 'Helvetica']
mpl.rcParams['font.size'] = 8
mpl.rcParams['axes.labelsize'] = 9
mpl.rcParams['xtick.labelsize'] = 7
mpl.rcParams['ytick.labelsize'] = 7
4. 图表尺寸

期刊专属宽度(详见 references/journal_requirements.md):

  • Nature:单栏 89 mm,双栏 183 mm
  • Science:单栏 55 mm,双栏 175 mm
  • Cell:单栏 85 mm,双栏 178 mm

检查图表尺寸是否符合要求:

from figure_export import check_figure_size

fig = plt.figure(figsize=(3.5, 3))  # 89 mm for Nature
check_figure_size(fig, journal='nature')
5. 多面板图表

最佳实践:

  • 使用粗体字母标记面板:A、B、C(大多数期刊使用大写字母,Nature 使用小写字母)
  • 所有面板保持样式一致
  • 尽可能沿边缘对齐面板
  • 在面板之间留出充足的空白

实现示例(完整代码见 references/matplotlib_examples.md):

from string import ascii_uppercase

fig = plt.figure(figsize=(7, 4))
gs = fig.add_gridspec(2, 2, hspace=0.4, wspace=0.4)

ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
# ... create other panels ...

# Add panel labels
for i, ax in enumerate([ax1, ax2, ...]):
    ax.text(-0.15, 1.05, ascii_uppercase[i], transform=ax.transAxes,
            fontsize=10, fontweight='bold', va='top')

常见任务

分步指南——每项任务的完整代码见 references/common_tasks.md 和 references/matplotlib_examples.md:

  1. 可直接用于发表的折线图——样式、期刊尺寸、色盲友好颜色、误差线、单位、去除上边框和右边框、矢量格式导出。
  2. 多面板图——GridSpec 布局、统一样式、加粗的面板标签。
  3. 使用合适颜色映射的热图——感知均匀的颜色映射(viridis)或色盲友好的发散型颜色映射(RdBu_r)、带标签的颜色条、灰度测试。
  4. 针对特定期刊进行准备——先调用 configure_for_journal(...),再调用 save_for_journal(...)。
  5. 修复现有图表——运行发表前检查清单(分辨率、格式、颜色、字体、标签、尺寸、灰度、图表杂项)。
  6. 色盲友好图表——认可的配色方案 + 冗余编码(线型、标记)+ 模拟器测试。

**统计严谨性(始终遵循):**误差线(SD/SEM/CI——在图注中说明具体类型)、样本量 n、显著性标记,并尽可能显示各个数据点。

绘图库——何时使用哪种

  • Matplotlib——控制力最强,最适合复杂的多面板图。示例:references/matplotlib_examples.md。
  • Seaborn——高级统计图形,支持自动计算 CI 和分面。完整指南:references/seaborn_in_publications.md。
  • Plotly——用于交互式探索;使用 fig.write_image('figure.png', scale=3) 导出静态图(约 300 DPI),需安装 kaleido >= 1 和 Chrome(运行一次 plotly_get_chrome)。参见 matplotlib_examples.md 示例 8。

资源

References 目录

根据需要加载以下内容,获取详细信息:

  • publication_guidelines.md:综合最佳实践

    • 分辨率和文件格式要求
    • 排版指南
    • 布局和构图规则
    • 统计严谨性要求
    • 完整的发表前检查清单
  • color_palettes.md:颜色使用指南

    • 色盲友好配色方案规范及 RGB 值
    • 顺序型和发散型颜色映射建议
    • 无障碍测试流程
    • 特定领域的配色方案(基因组学、显微镜成像)
  • journal_requirements.md:期刊专属规范

    • 各出版商的技术要求
    • 文件格式和 DPI 规范
    • 图表尺寸要求
    • 快速参考表
  • matplotlib_examples.md:实用代码示例

    • 10 个完整可运行的示例
    • 折线图、条形图、热图、多面板图
    • 期刊专属图表示例
    • 各绘图库的使用技巧(matplotlib、seaborn、plotly)
Scripts 目录

使用这些辅助脚本实现自动化:

  • figure_export.py:导出工具

    • save_publication_figure():以正确的 DPI 保存为多种格式
    • save_for_journal():自动应用期刊专属要求
    • check_figure_size():验证尺寸是否符合期刊规范
    • 直接运行:python scripts/figure_export.py 查看示例
  • style_presets.py:预配置样式

    • apply_publication_style():应用预设样式(default、nature、science、cell)
    • set_color_palette():快速切换配色方案
    • configure_for_journal():一键配置期刊规范
    • 直接运行:python scripts/style_presets.py 查看示例
Assets 目录

在图表中使用这些文件:

  • color_palettes.py:可导入的颜色定义

    • 所有推荐配色方案均以 Python 常量形式提供
    • apply_palette() 辅助函数
    • 可直接导入笔记本或脚本
  • Matplotlib 样式文件:与 plt.style.use() 搭配使用

    • publication.mplstyle:通用发表质量样式
    • nature.mplstyle:Nature 期刊规范
    • presentation.mplstyle:适用于海报和幻灯片的较大字体

工作流概述

创建出版级图表的推荐工作流:

  1. 规划:确定目标期刊、图表类型和内容
  2. 配置:采用适合期刊的样式
    from style_presets import configure_for_journal
    configure_for_journal('nature', 'single')
    
  3. 创建:绘制图表,并设置合适的标签、颜色和统计信息
  4. 验证:检查尺寸、字体、颜色和无障碍性
    from figure_export import check_figure_size
    check_figure_size(fig, journal='nature')
    
  5. 导出:以所需格式保存
    from figure_export import save_for_journal
    save_for_journal(fig, 'figure1', 'nature', 'combination')
    
  6. 审阅:在稿件中按最终尺寸查看

需要避免的常见问题

  1. 字体太小:按最终尺寸打印时,文字难以辨认
  2. JPEG 格式:切勿将 JPEG 用于图表/绘图(会产生失真)
  3. 红绿色搭配:约 8% 的男性无法区分
  4. 分辨率过低:出版的图表会出现像素化
  5. 缺少单位:始终为坐标轴标注单位
  6. 3D 效果:会扭曲观感,应完全避免
  7. 图表杂项:移除不必要的网格线和装饰
  8. 截断坐标轴:除非有科学依据,否则柱状图应从零开始
  9. 样式不一致:同一篇稿件中的图表使用了不同的字体/颜色
  10. 没有误差线:始终显示不确定性

最终检查清单

提交图表前,请确认:

  • 分辨率符合期刊要求(300+ DPI)
  • 文件格式正确(绘图使用矢量格式,图像使用 TIFF)
  • 图表尺寸符合期刊规范
  • 所有文字在最终尺寸下均清晰可读(≥6 pt)
  • 颜色对色盲读者友好
  • 图表在灰度模式下也能正常显示
  • 所有坐标轴均标注了单位
  • 已添加误差线,并在图注中说明其定义
  • 面板标签齐全且一致
  • 没有图表杂项或 3D 效果
  • 所有图表的字体保持一致
  • 已清晰标示统计显著性
  • 图例清晰完整

使用此技能可确保科学图表达到最高的出版标准,同时方便所有读者阅读。

评论

支持 Markdown