You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Matplotlib中轴刻度数字与轴标签字体样式一致?

让Matplotlib轴标签与刻度数字字体样式统一

你遇到的这个问题其实挺常见的——Matplotlib默认的刻度数字字体和你用$\mathsf{}$指定的轴标签字体不匹配。要解决这个问题,有两种比较直接的方法,我给你拆解一下:

方法一:全局设置LaTeX无衬线字体

通过修改Matplotlib的配置参数,让所有文本(包括刻度、标签、标题)都使用和你轴标签一致的无衬线LaTeX字体,这样整个图的风格会更统一:

import matplotlib.pyplot as plt

# 全局配置:启用LaTeX渲染所有文本,指定无衬线字体
plt.rcParams.update({
    "text.usetex": True,
    "font.family": "sans-serif",
    "sans-serif": ["Helvetica"]  # 可替换为你偏好的其他无衬线字体
})

x = [1, 2, 3, 4, 5]  # 示例数据
y = [1e-9, 2e-9, 5e-10, 3e-9, 1e-8]  # 示例数据

fig = plt.figure()
ax = fig.gca()

# 全局已设置无衬线字体,无需再用$\mathsf{}$包裹
ax.set_xlabel(r'Concentration [mol/m$^{3}$]')
ax.set_ylabel(r'Diffusion Coefficient [m$^2$/s]')

plt.semilogy(x, y)
plt.grid(True, which="both")
plt.autoscale()
plt.savefig("coeff.pdf")
plt.show()

方法二:单独设置刻度标签的字体

如果你不想全局修改配置,只想针对当前图的刻度进行调整,可以直接给坐标轴的刻度设置和轴标签一样的$\mathsf{}$格式,或者指定字体属性:

import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

x = [1, 2, 3, 4, 5]
y = [1e-9, 2e-9, 5e-10, 3e-9, 1e-8]

fig = plt.figure()
ax = fig.gca()

ax.set_xlabel(r'$\mathsf{Concentration [mol/m^{3}]}$')
ax.set_ylabel(r'$\mathsf{Diffusion Coefficient [m^2/s]}$')

# 处理对数轴的刻度格式化,确保科学计数法正常渲染
formatter = ScalarFormatter(useMathText=True)
formatter.set_scientific(True)
formatter.set_powerlimits((-2, 2))
ax.yaxis.set_major_formatter(formatter)

# 将刻度标签转为和轴标签一致的$\mathsf{}$格式
ax.set_xticklabels([r'$\mathsf{{{}}}$'.format(tick.get_text()) for tick in ax.get_xticklabels()])
ax.set_yticklabels([r'$\mathsf{{{}}}$'.format(tick.get_text()) for tick in ax.get_yticklabels()])

plt.semilogy(x, y)
plt.grid(True, which="both")
plt.autoscale()
plt.savefig("coeff.pdf")
plt.show()

这样处理后,轴标签和刻度数字的字体样式就完全一致啦!

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:41:52