注意
转到末尾以下载完整的示例代码。
使用 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 ( |
等宽 ( |
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
)而有所不同。如上所述,下划线 (_
) 在数学模式之外不需要转义。
注意
LaTeX 始终默认为数学使用衬线字体(即使 rcParams["font.family"] = "sans-serif"
)。如果需要,将 \usepackage{sfmath}
添加到 rcParams["text.latex.preamble"]
可以让 LaTeX 输出无衬线数学。
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 中设置环境变量。如果使用带有 Computer Modern 字体的 MiKTeX,如果得到奇怪的 *Agg 和 PNG 结果,请转到 MiKTeX/Options 并更新您的格式文件。
在 Ubuntu 和 Gentoo 上,基本的 texlive 安装不附带 type1cm 包。您可能需要安装一些额外的包才能获得其他 LaTeX 发行版捆绑的所有好处。
故障排除#
尝试删除您的
.matplotlib/tex.cache
目录。如果您不知道在哪里找到.matplotlib
,请参阅 matplotlib 配置和缓存目录位置。确保 LaTeX、dvipng 和 Ghostscript 都能正常工作并且都在您的
PATH
中。确保您尝试做的事情在 LaTeX 文档中是可行的,您的 LaTeX 语法是有效的,并且必要时您正在使用原始字符串以避免意外的转义序列。
rcParams["text.latex.preamble"]
(默认值:''
) 未被官方支持。 此选项提供了很大的灵活性,但也可能导致很多问题。请在报告问题之前禁用此选项。如果您仍然需要帮助,请参阅 获取帮助。