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 投稿时。