Латексный шрифт в matplotlib - Script-r - PullRequest
0 голосов
/ 17 декабря 2018

В matplotlib можно легко использовать латексный скрипт для обозначения осей, или писать легенды или любой другой текст.Но есть ли способ использовать новые шрифты, такие как 'script-r' в matplotlib?В следующем коде я маркирую оси с использованием латексных шрифтов.

import numpy as np
import matplotlib.pyplot as plt

tmax=10
h=0.01
number_of_realizations=6


for n in range(number_of_realizations):
    xpos1=0
    xvel1=0
    xlist=[]
    tlist=[]
    t=0
    while t<tmax:
        xlist.append(xpos1)
        tlist.append(t)
        xvel1=np.random.normal(loc=0.0, scale=1.0, size=None)
        xpos2=xpos1+(h**0.5)*xvel1                  # update position at time t
        xpos1=xpos2
        t=t+h
    plt.plot(tlist, xlist)
plt.xlabel(r'$ t$', fontsize=50)
plt.ylabel(r'$r$', fontsize=50)
plt.title('Brownian motion', fontsize=20)
plt.show()

Создается следующая цифра

normal r

Но я хочу вместо обычного r вместо «r» указать «script-r».,script r

В латексе нужно добавить следующие строки в преамбуле, чтобы отобразить 'script-r'

\DeclareFontFamily{T1}{calligra}{}
\DeclareFontShape{T1}{calligra}{m}{n}{<->s*[2.2]callig15}{}

\DeclareRobustCommand{\sr}{%
\mspace{-2mu}%
\text{\usefont{T1}{calligra}{m}{n}r\/}%
\mspace{2mu}%
}

Я не понимаю, как это сделатьэто в матплотлиб.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 декабря 2018

Matplotlib использует собственную реализацию TeX, созданную вручную (на чистом Python), чтобы выполнять все математические операции с текстом, поэтому вы абсолютно не можете предполагать, что то, что работает в стандартном LaTeX, будет работать с Matplotlib.При этом, вот как вы это делаете:

  1. Установите шрифт calligra, чтобы Matplotlib мог его увидеть, затем перестройте кэш шрифтов.

    • Многие другие темы имеют дело с тем, как это сделать, я не буду вдаваться в подробности, но вот некоторые ссылки:
      • Используйте шрифт , установленный в random место в вашей файловой системе.
      • Как установить новый шрифт в кэш управляемых шрифтов Matplotlib.
      • Список всех шрифтов , известных в настоящее время вашемуустановить Matplotlib.
  2. Заменить одно из семейств шрифтов TeX Matplotlib на выбранный вами.

    • Вот функция, которую я написал некоторое время назад, которая надежно делает это:

      import matplotlib
      
      def setMathtextFont(fontName='Helvetica', texFontFamilies=None):
          texFontFamilies = ['it','rm','tt','bf','cal','sf'] if texFontFamilies is None else texFontFamilies
      
          matplotlib.rcParams.update({'mathtext.fontset': 'custom'})
          for texFontFamily in texFontFamilies:
              matplotlib.rcParams.update({('mathtext.%s' % texFontFamily): fontName})
      

      Для вас хорошим способом использования функции было бы заменить шрифт, используемый \mathcal, на calligra:

      setMathtextFont('calligra', ['cal'])
      
  3. Отметьте свои графики, например, r'$\mathcal{foo}$', и содержимое макроса \math<whatever> должно отобразитьсяв нужном шрифте.

    • Вот как вы можете изменить свой код изготовления этикетки:

      plt.ylabel(r'$\mathcal{r}$', fontsize=50)
      

и это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...