Как использовать шрифт без засечек для тиков при использовании современного шрифта LaTeX Computer для математических выражений в графике matplotlib?

#python-3.x #matplotlib #fonts #latex

#python-3.x #matplotlib #шрифты #Латекс

Вопрос:

При использовании rc('text', usetex=True) все выглядит очень хорошо (шрифт без засечек для меток и шрифт Computer Modern для уравнений в тексте метки), за исключением тиков. Галочки написаны шрифтом Computer Modern, и я хотел бы иметь шрифт без засечек для галочек.

Одно из решений, которое я нашел, — использовать mpl.rcParams['text.latex.preamble'] = [r'usepackage{sansmath}', r'sansmath'] . Это правильно расставит галочки шрифтом без засечек. Однако это также влияет на уравнения, которые мне не нужны.

Второе решение — использовать ax.yaxis.get_major_formatter()._usetex = False . Это правильно помещает тики в шрифт без засечек и не влияет на уравнения. Однако это не работает для оси логарифмического масштаба. Мне удалось решить эту проблему с помощью 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'))
 

Результирующее изображение из этого кода:
введите описание изображения здесь

Есть ли гораздо более простой способ использовать шрифт без засечек для тиков при использовании компьютерного современного шрифта для уравнений в label?

Комментарии:

1. Вы хотите / должны использовать latex или использование latex является частью решения вашей проблемы? Некоторое соответствующее обсуждение находится в # 12856 .

2. Я хочу использовать latex. Спасибо за ссылку.

3. Я обнаружил, что я также могу использовать ax.yaxis.set_major_formatter(ticker.EngFormatter()) для значений, превышающих 1. Тем не менее, я действительно хочу получить галочки в формате «10 ^ x».