matplotlib中的Latex字体-Script-r

时间:2018-12-17 09:18:02

标签: python matplotlib fonts latex

在matplotlib中,可以轻松地使用乳胶脚本标记轴,或编写图例或任何其他文本。但是有没有办法在matplotlib中使用新字体,例如'script-r'?在以下代码中,我将使用乳胶字体标记轴。

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

但是我想要'script-r'代替普通的'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}%
}

我不知道如何在matplotlib中执行此操作。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

Matplotlib使用它自己的TeX(纯Python)手推式实现来完成所有数学文本操作,因此您绝对不能假设标准LaTeX中可以使用的内容可以与Matplotlib一起使用。话虽如此,这是您的操作方式:

  1. 安装calligra字体,以便Matplotlib可以看到它,然后重建字体缓存。

    • 很多其他线程都涉及如何执行此操作,我将不做详细介绍,但这里有一些参考资料:
      • 使用安装在文件系统上font位置的random
      • 如何install将新字体放入Matplotlib管理的字体缓存中。
      • 列出您安装的Matplotlib当前已知的所有fonts
  2. 用您选择的字体替换Matplotlib的TeX字体家族之一。

    • 这是我不久前编写的可靠执行此功能的函数:

      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)
      

那应该做到的。