如何让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
相关产品推荐
相关产品推荐

