注意
转到结尾 下载完整的示例代码。
使用 LaTeX 进行文本渲染#
Matplotlib 可以使用 LaTeX 来渲染文本。这可以通过在您的 rcParams 中设置 text.usetex : True
来激活,或者通过将 usetex
属性设置为 True 来激活单个 Text
对象。通过 LaTeX 处理文本比 Matplotlib 非常强大的 mathtext 速度更慢,但更灵活,因为可以使用不同的 LaTeX 包(字体包、数学包等)。结果可能很惊人,尤其是在您注意在图形中使用与主文档相同的字体时。
Matplotlib 的 LaTeX 支持需要一个可用的 LaTeX 安装。对于 *Agg 后端,还需要 dvipng;对于 PS 后端,还需要 PSfrag、dvips 和 Ghostscript。对于 PDF 和 SVG 后端,如果存在 LuaTeX,它将用于加速一些后处理步骤,但请注意,它不用于解析 TeX 字符串本身(只支持 LaTeX)。这些外部依赖项的可执行文件必须全部位于您的 PATH
中。
只支持少数字体系列(由 PSNFSS 方案定义)。它们列在这里,以及相应的 LaTeX 字体选择命令和 LaTeX 包,这些包将自动使用。
通用系列 |
字体 |
---|---|
serif ( |
Computer Modern Roman, Palatino ( |
无衬线字体 ( |
Computer Modern Serif, Helvetica ( |
手写体 ( |
Zapf Chancery ( |
等宽字体 ( |
Computer Modern Typewriter, 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"]
(默认值: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"]
(默认值:''
)不受官方支持。此选项提供了很大的灵活性,以及很多造成问题的方法。请在向邮件列表报告问题之前禁用此选项。如果您仍然需要帮助,请参阅 获取帮助。