在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()
它产生下图
在乳胶中,必须在序言中添加以下几行以呈现“ 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中执行此操作。任何帮助表示赞赏。
答案 0 :(得分:3)
Matplotlib使用它自己的TeX(纯Python)手推式实现来完成所有数学文本操作,因此您绝对不能假设标准LaTeX中可以使用的内容可以与Matplotlib一起使用。话虽如此,这是您的操作方式:
安装calligra
字体,以便Matplotlib可以看到它,然后重建字体缓存。
用您选择的字体替换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'])
标记您的绘图,例如r'$\mathcal{foo}$'
,并且\math<whatever>
宏的内容应以所需的字体显示。
这是更改标签制作代码的方法:
plt.ylabel(r'$\mathcal{r}$', fontsize=50)
那应该做到的。