在matplotlib图中如何将LaTeX Computer Modern字体用于数学表达式时,如何将sans-serif字体用作刻度?

时间:2019-04-17 15:46:55

标签: python-3.x matplotlib fonts latex

使用rc('text', usetex=True)时,除刻度线外,其他所有内容看起来都很好(标签使用sans-serif字体,标签文本使用Computer Modern字体)。刻度线为Computer Modern字体,我希望使用无衬线字体作为刻度线。

我发现的一种解决方案是使用mpl.rcParams['text.latex.preamble'] = [r'\usepackage{sansmath}', r'\sansmath']。这样可以正确地将刻度线设置为sans-serif字体。但是,它也会影响我不想要的方程。

第二种解决方案是使用ax.yaxis.get_major_formatter()._usetex = False。这样可以正确地将勾号用sans-serif字体显示,并且不影响方程式。但是,它不适用于对数刻度轴。我设法使用ax.yaxis.set_major_formatter(plt.FormatStrFormatter('%.e'))解决了这个问题。但是,刻度不再是“ 10 ^ x”格式。

#!/usr/bin/env python
# coding: utf8

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt 

mpl.rc('text', usetex=True) # Let TeX do the typsetting

if False:
    mpl.rcParams['text.latex.preamble'] = [r'\usepackage{sansmath}',
                                           r'\sansmath']

# Data
a = np.arange(24).reshape(6,4)/1.
x = np.arange(7)
y = np.array((1, 10, 100, 1000, 10000))

# Figure
fig = plt.figure(figsize=(6, 3))
ax = plt.subplot(111)
pc = plt.pcolormesh(x, y, a.T, cmap=mpl.cm.viridis)
cbar = plt.colorbar()
plt.title(r"\textit{This} \underline{is the} \textbf{title}", fontsize=10)
plt.xlabel(r"This is the $x$ axis $D_x$ (\textmu m)", fontsize=9)
plt.ylabel(r"\textit{\underline{This}} is the $y$ axis $P_y$ (km)", fontsize=9)
cbar.set_label(label=r"Colorbar $R'_T=\frac{b}{a}$ (\%)", fontsize=9)
plt.text(2, 50, r'\textbf{Sample Text}', fontsize=20, color='w')

# Tick param
ax.set_yscale('log')
if True:
    ax.xaxis.get_major_formatter()._usetex = False
    ax.yaxis.get_major_formatter()._usetex = False
    cbar.ax.yaxis.get_major_formatter()._usetex = False
if False:
    ax.yaxis.set_major_formatter(plt.FormatStrFormatter('%.e'))

此代码生成的图像在这里:https://i.stack.imgur.com/hDowM.png

有没有更简单的方法将sans-serif字体用于刻度线,而将Computer Modern字体用于标签中的方程式呢?

0 个答案:

没有答案