大家好,我是你们的小帅学长。
你有没有遇到一个很现实的问题,你自己看每一张图都“没问题”,但把 10 张图放到论文里,突然就像“十个人画的”。
这张字体大、那张字体小;
这张线宽粗、那张线宽细;
这张刻度朝外、那张朝内;
图例风格不一致、网格透明度不一致;
保存分辨率忽高忽低……
这种“风格不统一”不是审美问题,是科研表达的可靠性问题。
因为审稿人/导师看到的不只是结果,还会从视觉一致性判断你是否规范、是否严谨。
所以这篇我们做一件非常“体系化”的事:
用 rcParams 把你常用的出图风格一次性固定下来:字体、字号、线宽、刻度、图例、保存参数……以后画任何图都自动套用。
01.rcParams 是什么?为什么它能让你效率爆炸?
你可以把 rcParams 理解成:Matplotlib 的默认配置表。
你每次写的这些重复代码:
plt.figure(figsize=(...))plt.xlabel(..., fontsize=...)plt.ylabel(..., fontsize=...)plt.grid(alpha=...)plt.savefig(..., dpi=..., bbox_inches="tight")
其实很多都可以通过 rcParams 固化成默认值。你只要设置一次,后面所有图都自动统一,省掉大量重复劳动,更关键的是:统一输出风格。
02.统一风格你要统一什么?
我建议你至少统一这 7 件事:
1、字体(中英混排)
2、字号层级(标题/轴标签/刻度)
3、线宽、marker 大小
4、坐标轴粗细、刻度方向、刻度长度
5、图例样式(是否带边框、字体大小)
6、网格透明度(可选)
7、保存参数(dpi、格式、裁切)
03.一键风格模板
这套“科研常用风格模板”,你复制就能用。
import osimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fmdef set_pub_style():"""统一风格(rcParams):-英文/数字:Times New Roman-中文:宋体 SimSun-公式:Times New Roman"""win_fonts= r"C:\Windows\Fonts"candidates= [os.path.join(win_fonts,"times.ttf"),os.path.join(win_fonts,"timesbd.ttf"),os.path.join(win_fonts,"timesi.ttf"),os.path.join(win_fonts,"simsun.ttc"),]for p in candidates:if os.path.exists(p):try:fm.fontManager.addfont(p)except Exception:passmpl.rcParams.update({#==字体=="font.family": ["Times New Roman", "SimSun"],#数学公式字体统一"mathtext.fontset": "custom","mathtext.rm": "Times New Roman","mathtext.it": "Times New Roman:italic","mathtext.bf": "Times New Roman:bold",#负号"axes.unicode_minus": False,#==图尺寸与分辨率=="figure.figsize": (6, 4),"figure.dpi": 100,"savefig.dpi": 300,"savefig.bbox": "tight","savefig.pad_inches":0.05,#==字号体系=="font.size": 12,"axes.titlesize": 14,"axes.labelsize": 12,"xtick.labelsize": 11,"ytick.labelsize": 11,"legend.fontsize":11,#==线条与标记=="lines.linewidth":2.0,"lines.markersize":6,#==坐标轴与刻度=="axes.linewidth":1.2,"xtick.direction": "out","ytick.direction": "out","xtick.major.size": 5,"ytick.major.size": 5,"xtick.major.width": 1.1,"ytick.major.width":1.1,})set_pub_style()
04.用法示范:你只管画,风格自动套用
你会发现:以后你根本不用每张图都设置字号、线宽、dpi、grid等,默认就全部统一。
import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 10, 200)y = np.sin(x)fig, ax = plt.subplots()ax.plot(x, y, label="Observation / 观测值")ax.set_title("统一风格示例:标题中英混排")ax.set_xlabel("Time (day) / 时间(天)")ax.set_ylabel("Tₛ (K) / 温度")ax.legend()fig.savefig("style_demo.jpg")plt.close(fig)
注意:这里我没有写 dpi、bbox、pad,因为 rcParams 已经统一设置了。

05.常见坑:为什么设置了 rcParams 还是没生效?
三个高频原因:
一是你在设置 rcParams 之前已经创建了 Figure/Axes → 注意:rcParams 要在画图之前设置(脚本开头最稳)。
二是你的代码里手动写了 fontsize=...、linewidth=... → 注意:手动参数会覆盖默认值(这是正常的)。
三是字体没有被 Matplotlib 识别(出现方框/警告) → 注意:用我上面的 addfont + 删除 ~/.matplotlib/fontlist-*.json 重建缓存最稳。
科研画图真正的效率来自“统一”。用 rcParams 把字体、字号、线宽、刻度、保存参数一次性固化,你以后画的每一张图都会更快、更稳、更像同一套论文图。
下一篇我会接着把“统一风格”这条线往前推一步,聊一个更影响观感、也更容易踩坑的问题:《配色与色带:连续/离散怎么选》。
——期待你的关注——