Подтвердить что ты не робот

Matplotlib, совместимый шрифт с использованием латекса

Моя проблема в том, что я хотел бы использовать названия Latex на некоторых сюжетах и ​​латекс в других. В настоящее время matplotlib имеет два разных шрифта по умолчанию для титулов Latex и не-латексных названий, и я бы хотел, чтобы эти два были согласованными. Есть ли настройка RC, которую я должен изменить, что позволит это автоматически?

Я создаю график со следующим кодом:

import numpy as np
from matplotlib import pyplot as plt

tmpData = np.random.random( 300 )

##Create a plot with a tex title
ax = plt.subplot(211)
plt.plot(np.arange(300), tmpData)
plt.title(r'$W_y(\tau, j=3)$')
plt.setp(ax.get_xticklabels(), visible = False)

##Create another plot without a tex title
plt.subplot(212)
plt.plot(np.arange(300), tmpData )
plt.title(r'Some random numbers')
plt.show()

Вот несоответствие, о котором я говорю. Наклейки с тиковыми осями тонкие по отношению к названиям:

4b9b3361

Ответ 1

Чтобы текст tex-style/mathtext выглядел как обычный текст, вам нужно установить шрифт mathtext в Bitstream Vera Sans,

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'custom'
matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans'
matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic'
matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')

Если вы хотите, чтобы обычный текст выглядел как текстовый текст, вы можете изменить все на Stix. Это повлияет на ярлыки, титры, тики и т.д.

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'stix'
matplotlib.rcParams['font.family'] = 'STIXGeneral'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')

Основная идея заключается в том, что вам нужно установить одинаковые шрифты как обычного, так и mathtext, и способ сделать это немного неясен. Вы можете просмотреть список пользовательских шрифтов,

sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

Как уже упоминалось, вы также можете сделать латекс для вас одним шрифтом, установив text.usetex в rcParams, но это медленное и не совсем необходимое.

Ответ 2

ИЗМЕНИТЬ

если вы хотите изменить шрифты, используемые LaTeX внутри matplotlib, посмотрите эту страницу

http://matplotlib.sourceforge.net/users/usetex.html

один из примеров есть

from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
## for Palatino and other serif fonts use:
#rc('font',**{'family':'serif','serif':['Palatino']})
rc('text', usetex=True)

Просто выберите свой любимый!

И если вам нужен жирный шрифт, вы можете попробовать \mathbf

plt.title(r'$\mathbf{W_y(\tau, j=3)}$')

РЕДАКТИРОВАТЬ 2

Ниже вы сделаете полужирный шрифт по умолчанию для вас

font = {'family' : 'monospace',
        'weight' : 'bold',
        'size'   : 22}

rc('font', **font)