备注
前往末尾 下载完整示例代码。
使用 LaTeX 进行文本渲染#
Matplotlib 可以使用 LaTeX 来渲染文本。这可以通过在你的 rcParams 中设置 text.usetex : True 来激活,或者通过将单个 Text 对象的 usetex 属性设置为 True 来实现。通过 LaTeX 处理文本比 Matplotlib 非常强大的 mathtext 要慢,但它更灵活,因为可以使用不同的 LaTeX 包(字体包、数学包等)。结果可能会非常引人注目,特别是当你在图表中使用与主文档相同的字体时。
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 ( |
等宽字体 ( |
计算机现代打字机,Courier ( |
默认字体族(不需要加载任何 LaTeX 包)是 Computer Modern。所有其他字体族都是 Adobe 字体。Times 和 Palatino 各自有自己的配套数学字体,而其他 Adobe 衬线字体则使用 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"] (default: False) 的不同而有所不同。如上所述,下划线 (_) 在数学模式外不需要转义。
PostScript 选项#
为了生成可以嵌入到新 LaTeX 文档中的封装 PostScript (EPS) 文件,Matplotlib 的默认行为是通过去除一些 LaTeX 使用的但在 EPS 文件中非法的 PostScript 操作符来提炼输出。这一步骤可能会导致一些用户无法接受的结果,因为文本会被粗糙地光栅化并转换为位图,这些位图不像标准 PostScript 那样可缩放,并且文本不可搜索。一个解决方法是设置 rcParams["ps.distiller.res"] (default: 6000) 为更高的值(例如 6000)在你的 rc 设置中,这将生成更大的文件但可能看起来更好并且合理缩放。一个更好的解决方法,需要 Poppler 或 Xpdf,可以通过将 rcParams["ps.usedistiller"] (default: None) 更改为 xpdf 来激活。这种替代方法生成不带文本光栅化的 PostScript,因此它可以正确缩放,可以在 Adobe Illustrator 中编辑,并且在 pdf 文档中可以搜索文本。
可能的障碍#
在Windows上,可能需要修改
PATH环境变量,以包含包含latex、dvipng和ghostscript可执行文件的目录。详情请参见 环境变量 和 设置Windows环境变量。使用带有Computer Modern字体的MiKTeX时,如果遇到奇怪的*Agg和PNG结果,请前往MiKTeX/选项并更新您的格式文件。
在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"](default:'') 未正式支持。此选项提供了很大的灵活性,但也提供了很多引发问题的方式。请在向邮件列表报告问题之前禁用此选项。如果你仍然需要帮助,请参阅 获取帮助。