笔记
单击此处 下载完整的示例代码
使用 LaTeX 进行文本渲染#
Matplotlib 可以使用 LaTeX 来渲染文本。这可以通过
在您的 rcParams 中设置,或者通过在单个对象上将属性设置为 True 来激活。通过 LaTeX 处理文本比 Matplotlib 非常强大的mathtext 慢,但更灵活,因为可以使用不同的 LaTeX 包(字体包、数学包等)。结果可能是惊人的,尤其是当您注意在图形中使用与主文档中相同的字体时。text.usetex : True
usetex
Text
Matplotlib 的 LaTeX 支持需要一个工作的LaTeX安装。对于 *Agg 后端,还需要dvipng ;对于 PS 后端,
还需要PSfrag、dvips和Ghostscript。对于 PDF 和 SVG 后端,如果 LuaTeX 存在,它将用于加快一些后处理步骤,但请注意,它不用于解析 TeX 字符串本身(仅支持 LaTeX)。这些外部依赖项的可执行文件必须全部位于您的PATH
.
仅支持少数字体系列(由PSNFSS方案定义)。此处列出了它们,以及自动使用的相应 LaTeX 字体选择命令和 LaTeX 包。
普通家庭 |
字体 |
---|---|
衬线 ( |
Computer Modern Roman, Palatino ( |
无衬线 ( |
Computer Modern Serif, Helvetica ( |
草书 ( |
Zapf Chancery ( |
等宽 ( |
电脑现代打字机、快递( |
默认字体系列(不需要加载任何 LaTeX 包)是 Computer Modern。所有其他系列都是 Adobe 字体。Times 和 Palatino 都有自己的数学字体,而其他 Adobe serif 字体则使用 Computer Modern 数学字体。
要启用 LaTeX 并选择字体,请使用例如:
plt.rcParams.update({
"text.usetex": True,
"font.family": "Helvetica"
})
或等效地,将您的matplotlibrc设置为:
text.usetex : true
font.family : Helvetica
也可以改为设置font.family
为通用系列名称之一,然后配置相应的通用系列;例如:
plt.rcParams.update({
"text.usetex": True,
"font.family": "sans-serif",
"font.sans-serif": "Helvetica",
})
(在 Matplotlib 3.5 之前,这是必需的方法)。
这是标准示例, 使用 TeX 渲染数学方程:
请注意,不支持显示数学模式 ( ),但添加命令,如上面的演示,将产生相同的结果。$$ e=mc^2 $$
\displaystyle
非 ASCII 字符(例如上面 y 标签中的度数符号)在inputenc支持的范围内得到支持。
笔记
为了与非 usetex 情况保持一致,Matplotlib 特殊情况下换行,以便单个换行产生换行符(而不是在标准 LaTeX 中被解释为空格)。
Matplotlib 使用underscore包,因此下划线 ( _
) 在文本模式下“按原样”打印(而不是像在标准 LaTeX 中那样导致错误)。下划线仍然在数学模式中引入下标。
笔记
某些字符需要在 TeX 中进行特殊转义,例如:
# $ % & ~ ^ \ { } \( \) \[ \]
因此,这些字符的行为会有所不同
rcParams["text.usetex"]
(默认值:False
)。如上所述,下划线 ( _
) 不需要在数学模式之外转义。
PostScript 选项#
为了生成可以嵌入到新 LaTeX 文档中的封装 PostScript (EPS) 文件,Matplotlib 的默认行为是提取输出,这会删除 LaTeX 使用的一些在 EPS 文件中非法的 PostScript 运算符。此步骤会产生一些用户可能无法接受的结果,因为文本被粗略地光栅化并转换为位图,它不像标准 PostScript 那样可缩放,并且文本不可搜索。一种解决方法是在 rc 设置中将rcParams["ps.distiller.res"]
(默认6000
值:)设置为更高的值(可能是 6000),这将生成更大的文件,但可能看起来更好并且可以合理扩展。需要Poppler或Xpdf的更好的解决方法可以通过将rcParams["ps.usedistiller"]
(默认值None
:)更改为来激活xpdf
. 这种替代方法可以生成 PostScript 而不对文本进行光栅化,因此它可以正确缩放,可以在 Adobe Illustrator 中进行编辑,并可以在 pdf 文档中搜索文本。
可能的挂断#
在 Windows 上,
PATH
可能需要修改环境变量以包含包含latex、dvipng 和ghostscript 可执行文件的目录。有关详细信息,请参阅环境变量和 在 Windows中设置环境变量。将 MiKTeX 与 Computer Modern 字体一起使用,如果您得到奇怪的 *Agg 和 PNG 结果,请转到 MiKTeX/Options 并更新您的格式文件
在 Ubuntu 和 Gentoo 上,基本的 texlive 安装不附带 type1cm 包。您可能需要安装一些额外的软件包才能获得与其他 LaTeX 发行版捆绑在一起的所有好东西。
已经取得了一些进展,因此 Matplotlib 直接使用 dvi 文件进行文本布局。这允许 LaTeX 用于带有 pdf 和 svg 后端以及 *Agg 和 PS 后端的文本布局。将来,LaTeX 安装可能是唯一的外部依赖项。
故障排除#
尝试删除您的
.matplotlib/tex.cache
目录。如果您不知道在哪里可以找到.matplotlib
,请参阅matplotlib 配置和缓存目录位置。确保 LaTeX、dvipng 和 ghostscript 都可以正常工作并在您的
PATH
.确保您尝试在 LaTeX 文档中执行的操作是可能的,确保您的 LaTeX 语法有效,并且在必要时使用原始字符串以避免意外的转义序列。
rcParams["text.latex.preamble"]
(默认值:)''
不受官方支持。这个选项提供了很大的灵活性,以及很多导致问题的方法。请在向邮件列表报告问题之前禁用此选项。如果您仍需要帮助,请参阅获得帮助。