我想用乳胶和其他字体绘图,但只有乳胶字体似乎可用。如何使用usetex启用其他字体?
import numpy as np
import matplotlib.pyplot as plt
plt.rc('text', usetex=True)
plt.rc('font', family='Arial')
plt.imshow(np.random.randn(100, 100))
plt.title('This is a test')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.show()
答案 0 :(得分:2)
usetex=True
您必须将自己的LaTeX标头用于matplotlib。 然后,您可以使用fontpackages选择字体。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['text.usetex'] = True
plt.rcParams['text.latex.unicode'] = True
plt.rcParams['text.latex.preamble'] = r'''
\usepackage{mathtools}
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
% more packages here
'''
plt.imshow(np.random.randn(100, 100))
plt.title('This is a test')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.savefig('test.pdf')
使用pgf后端可以获得最大的灵活性。这需要在系统中安装最近的LaTeX。
对我来说,最实用的方法是拥有matplotlibrc
和header-matplotlib.tex
,并在texplotlibrc中包含texfile。但是,因为matplotlib在tmp目录中运行tex,所以需要将当前目录添加到TEXINPUTS
。
示例:
matplotlibrc
backend: pgf # use the pgf backend
pgf.rcfonts : False # setup the fonts yourself in the header
text.usetex : True
text.latex.unicode : True
pgf.texsystem : lualatex
pgf.preamble : \input{header-matplotlib.tex}
header-matplotlib.tex
\usepackage{fontspec}
\setsansfont{Arial} # for the example I used Fira Sans
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
% more packages here
pgf_plot.py
(这个要小得多,因为我们在`matplotlibrc中设置选项)
import matplotlib.pyplot as plt
import numpy as np
plt.imshow(np.random.randn(100, 100))
plt.title('This is a test')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.savefig('test.pdf')
使用
运行$ TEXINPUTS=$(pwd): python pgf_plots.py
结果:
可以扩展此方法,以使绘图的字体和字体大小与文档中使用的字体和字体大小相匹配,请参阅此处的示例: https://github.com/Python4AstronomersAndParticlePhysicists/PythonWorkshop-ICE/tree/master/examples/use_system_latex