如何在matplotlib中使用rc param`usetex = True`和其他字体

时间:2018-04-21 15:48:42

标签: python python-3.x matplotlib

我想用乳胶和其他字体绘图,但只有乳胶字体似乎可用。如何使用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()

Plotted image

1 个答案:

答案 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')

结果: usetex result

使用pgf后端

使用pgf后端可以获得最大的灵活性。这需要在系统中安装最近的LaTeX。

对我来说,最实用的方法是拥有matplotlibrcheader-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

结果:

Result

可以扩展此方法,以使绘图的字体和字体大小与文档中使用的字体和字体大小相匹配,请参阅此处的示例: https://github.com/Python4AstronomersAndParticlePhysicists/PythonWorkshop-ICE/tree/master/examples/use_system_latex