garrettj403/SciencePlots · 上手攻略

  • 仓库:garrettj403/SciencePlots
  • 链接:https://github.com/garrettj403/SciencePlots
  • 分类:academic-writing
  • 作者:Jay
  • 更新:2026-07-15

这是什么

SciencePlots 是一套 Matplotlib 样式表(matplotlib styles),专门用于把 Python 绘制的图表格式化成符合学术论文、学位论文和会议演示稿要求的"科学出版级"外观。它不是一个新的绘图库——而是给已有 Matplotlib 配上一层预调好的视觉规范,让图表的字体大小、坐标轴粗细、图例样式、颜色循环等自动匹配不同期刊的要求。

项目目前累计超过 9000+ Stars,在 GitHub 学术可视化类仓库中属于头部存在,被多篇正式发表的 IEEE / Nature 论文引用。


解决什么问题

在学术写作中,图表需要严格遵循目标期刊或会议的排版规范:字号、字体类型(衬线/无衬线)、图像宽度、坐标轴标注精度、颜色循环是否符合色盲友好标准……这些细节用手工逐项调整既费时又容易出错。

SciencePlots 把这些规范做成可叠加的 Matplotlib 样式(.mplstyle 文件),一行 plt.style.use() 即可切换到对应期刊的视觉模板,省去大量手动配置。


快速安装

依赖前提

  • Python ≥ 3.7
  • Matplotlib ≥ 3.4(需预装,大多数环境已有)
  • LaTeX(用于渲染数学公式与高质量字体,核心样式 science 依赖此依赖)

LaTeX 安装方式:

# Ubuntu / Debian
sudo apt-get install dvipng texlive-latex-extra texlive-fonts-recommended cm-super

# macOS(推荐 MacTeX)
brew install --cask mactex  # 或从 https://tug.org/mactex/ 下载

# Windows(推荐 TeX Live)
# 从 https://tug.org/texlive/ 下载安装包

⚠️ LaTeX 为强依赖:若不安装 LaTeX,science 样式会报错。若确实无法安装,可叠加 no-latex 样式使用(见下文"坑与注意")。

安装 SciencePlots 本身

# PyPI(稳定版,推荐)
pip install SciencePlots

# conda-forge
conda install -c conda-forge scienceplots

# GitHub 最新 commit(开发版)
pip install git+https://github.com/garrettj403/SciencePlots

⚠️ v2.0.0+ 重要变更:必须在设置样式之前先执行 import scienceplots,否则样式不会生效。这与旧版(v1.x)行为不同。


核心用法

基础三步走

import matplotlib.pyplot as plt
import scienceplots  # ⚠️ v2.0.0+ 必须显式导入

plt.style.use('science')   # 激活 science 样式

# 正常画图
plt.figure(figsize=(6, 4))
plt.plot(x, y, label='data')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (V)')
plt.legend()
plt.savefig('fig1.pdf', bbox_inches='tight')

样式叠加(层叠机制)

SciencePlots 的核心设计理念是可叠加。通过传入列表,后面的样式会覆盖前面样式的同名参数:

plt.style.use(['science', 'ieee'])      # 科学基础 + IEEE 期刊规范
plt.style.use(['science', 'nature'])    # 科学基础 + Nature 风格
plt.style.use(['science', 'no-latex'])  # 科学基础但关闭 LaTeX
plt.style.use(['science', 'grid'])      # 加网格线

常用组合示例:

# IEEE 会议论文(单栏宽度)
plt.style.use(['science', 'ieee'])
fig, ax = plt.subplots()
ax.plot(t, signal)
plt.show()

# Jupyter Notebook(优化显示)
plt.style.use(['science', 'notebook'])
plt.plot(x, y)
plt.show()

# 带网格的演示文稿
plt.style.use(['science', 'grid'])

临时使用(上下文管理器)

不全局修改样式,用 plt.style.context() 局部生效:

import matplotlib.pyplot as plt
import scienceplots

# 仅这个图用 science 样式
with plt.style.context('science'):
    plt.figure()
    plt.plot(a, b)
    plt.show()

颜色循环(Color Cycles)

SciencePlots 内置了多种色板,支持色盲友好和高对比度需求:

# Paul Tol 的离散彩虹色板(色盲安全),支持 1-23 种颜色
plt.style.use(['science', 'discrete-rainbow-8'])

# 高可见度色板
plt.style.use(['science', 'high-vis'])

# 亮色色板(色盲安全)
plt.style.use(['science', 'bright'])

CJK 字体支持(中日韩)

⚠️ CJK 字体支持已在 v2.x 废弃,推荐改用 mplfonts。以下为历史信息。

# 繁体中文(需先安装 Noto CJK 字体)
plt.style.use(['science', 'no-latex', 'cjk-tc-font'])

# 简体中文
plt.style.use(['science', 'no-latex', 'cjk-sc-font'])

安装 Noto CJK 字体:

# Ubuntu/Debian
sudo apt install fonts-noto-cjk

# macOS
brew install --cask font-noto-serif-cjk-tc font-noto-serif-cjk-sc

典型适用场景

场景 推荐样式组合
IEEE 期刊论文 ['science', 'ieee']
Nature / Science 类期刊 ['science', 'nature']
学位论文(英文) ['science']
课堂作业 / Jupyter Notebook ['science', 'notebook']
演示 PPT ['science', 'grid']
色盲友好多曲线图 ['science', 'bright']
中文图表(无 LaTeX) ['science', 'no-latex', 'cjk-sc-font']

坑与注意

1. LaTeX 是强依赖

science 样式默认启用 LaTeX,若未安装会报错。可用 ['science', 'no-latex'] 绕过,但这会失去高质量数学渲染。建议尽量安装 LaTeX,输出质量差距明显。

2. v2.0.0 必须显式 import

旧代码在升级到 v2.0.0+ 后若不再生效,请确认已添加 import scienceplots。这是 breaking change。

3. CJK 字体包已废弃

项目维护者已不再更新 CJK 样式,推荐迁移至 mplfonts。继续使用 CJK 样式可能遇到兼容性风险。

4. 字体手动指定

SciencePlots 默认衬线字体。如需 Times New Roman 等特定字体:

plt.rcParams.update({
    "font.family": "serif",
    "font.serif": ["Times New Roman"],
    "font.size": 11
})

5. 图像宽度与列宽

ieee 样式会自动限制图像宽度为单栏宽;Nature 样式切换为无衬线字体。叠加时注意层叠效果是否符合预期。

6. 字体缓存

安装新字体后 Matplotlib 可能找不到,需要刷新字体缓存:

import matplotlib.font_manager as fm
fm._rebuild()

与同类对比

仓库 定位 优点 缺点
SciencePlots Matplotlib 样式层 零学习成本、期刊模板丰富、社区活跃 强依赖 LaTeX、仅支持 Matplotlib
mpltools Matplotlib 美化 有一些科学图样式 维护不活跃
Seaborn 高级统计绘图 功能强大、API 友好 样式偏现代商业风,学术模板少
** PlotStyle**(学术工具) 独立格式转换 可导出多种格式 需要额外工具链

结论:如果你只用 Matplotlib 画图,SciencePlots 是目前学术可视化最省心的选择。Seaborn 更适合探索性数据分析;SciencePlots 更适合最终投稿级图表。


一句话推荐结论

如果你用 Python 画学术图表但不想每次为字体、坐标轴和颜色循环手动调半小时,SciencePlots 是值得一键安装的"学术图表排版神器"——尤其是向 IEEE / Nature 投稿时。