如何让Python绘图的字体与LaTeX文本字体保持一致?
如何让Python绘图的字体与LaTeX文本字体保持一致?
嗨,这个问题我做学术绘图时碰到过好多次,毕竟论文里图和正文字体不统一看着真的很别扭!如果你用的是Matplotlib(Python最常用的绘图库),下面这几种方法绝对能帮你搞定字体一致性的问题:
方法一:全局启用LaTeX渲染(最推荐)
这是一劳永逸的办法,设置一次后,整个脚本里的所有绘图元素(标签、标题、刻度、公式)都会用LaTeX的字体渲染,和你的LaTeX文档完全同步。
只需要在导入Matplotlib后,加上这段配置代码:
import matplotlib.pyplot as plt # 更新全局参数,启用LaTeX并匹配LaTeX字体族 plt.rcParams.update({ "text.usetex": True, # 核心设置:让Matplotlib调用LaTeX处理所有文本 "font.family": "serif", # 对应LaTeX默认的衬线字体(比如Computer Modern) # 如果你LaTeX用了特定字体(比如Times New Roman),可以指定具体字体 # "font.serif": ["Times New Roman"], }) # 正常绘图即可,所有文本自动匹配LaTeX字体 fig, ax = plt.subplots() ax.plot([1, 2, 3], [4, 1, 3]) ax.set_xlabel('样本编号 $n$') # 公式也会和LaTeX里的格式完全一致 ax.set_ylabel('测量值 $y$') ax.set_title('实验结果对比') plt.show()
解释下:text.usetex: True会让Matplotlib调用你系统里的LaTeX环境(比如TeX Live、MikTeX)渲染文本,所以字体、公式格式都会和你的LaTeX文档完全匹配。如果你的LaTeX用无衬线字体,把font.family改成sans-serif,再对应设置sans-serif的字体列表就行。
方法二:局部指定LaTeX渲染(适合部分文本调整)
如果你不想全局修改,只想给个别标签、标题单独用LaTeX字体,也可以在设置文本时直接加参数:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3], [4, 1, 3]) # 对单个标签启用LaTeX渲染,注意加r前缀避免转义 ax.set_xlabel(r'\textbf{样本编号} $\sum_{i=1}^n x_i$', usetex=True) ax.set_ylabel(r'\textit{测量值} $y = ax + b$', usetex=True) plt.show()
这里的r前缀很关键,能让Python把字符串当成原始字符串处理,避免LaTeX的反斜杠被转义。usetex=True会让这行文本单独用LaTeX渲染。
几个要注意的小细节
- 确保你的电脑上已经安装了LaTeX环境,不然Matplotlib调用LaTeX渲染会报错。
- 如果你用Jupyter Notebook,记得在开头加上
%matplotlib inline(或%matplotlib notebook),再设置rcParams才会生效。 - 要是你用Seaborn绘图,它基于Matplotlib开发,上面的设置完全适用,只需要在导入Seaborn前后配置Matplotlib参数就行。
这样设置后,你画的图里的文字就和LaTeX正文的字体完全一致啦,再也不用纠结格式不统一的问题了!
备注:内容来源于stack exchange,提问作者Light
相关产品推荐
相关产品推荐

