Matplotlib:使用 tex

日期2008-12-04(最后修改),2006-01-22(创建)

Matplotlib 可以使用 LaTeX 来处理图形中的文本布局。此选项(目前仍处于实验阶段)可以通过在 rc 设置中设置 text.usetex : true 来激活。使用 matplotlib 的 LaTeX 支持进行文本处理比标准文本处理速度慢,但更灵活,并生成出版质量的绘图。结果非常显著,尤其是在您仔细使用与主文档中相同的字体时。

Matplotlib 的 LaTeX 支持仍在开发中,尽管至少有两个人依靠它来生成他们的博士论文的图形。从 matplotlib-0.87 开始,已经进行了许多改进,如果您有早期版本,请更新 matplotlib。此选项需要一个可用的 LaTeX 安装,dvipng(可能包含在您的 TeX 安装中)和 ghostscript (AFPL, GPL,或 ESP ghostscript 都应该可以工作,但推荐使用 GPL ghostscript-8.60 或更高版本)。这些外部依赖项的可执行文件必须位于您的 PATH 上。

有几个选项可以提到,可以使用 rc 设置进行更改,无论是使用 matplotlibrc 文件还是程序中的 rcParams 字典。以下是一个 matplotlibrc 文件示例

在 [ ]
font.family        : serif
font.serif         : Times, Palatino, New Century Schoolbook, Bookman, Computer Modern Roman
font.sans-serif    : Helvetica, Avant Garde, Computer Modern Sans serif
font.cursive       : Zapf Chancery
font.monospace     : Courier, Computer Modern Typewriter

text.usetex        : true

每个字体系列中第一个有效的字体将被加载。如果未指定字体,则默认情况下使用 Computer Modern 字体。所有其他字体都是 Adobe 字体。Times 和 Palatino 都有自己的配套数学字体,而其他 Adobe serif 字体则使用 Computer Modern 数学字体。有关更多详细信息,请参阅 psnfss2e.pdf

要使用 tex 并选择例如 Helvetica 作为默认字体,无需编辑 matplotlibrc,请使用

在 [ ]
#!python
from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
## for Palatino and other serif fonts use:
#rc('font',**{'family':'serif','serif':['Palatino']})
rc('text', usetex=True)

注意:您需要在导入 `matplotlib.pylab` 之前执行此操作。

以下是标准示例,tex_demo.py

在 [ ]
from matplotlib import rc
from matplotlib.numerix import arange, cos, pi
from pylab import figure, axes, plot, xlabel, ylabel, title, grid, savefig, show

rc('text', usetex=True)
figure(1)
ax = axes([0.1, 0.1, 0.8, 0.7])
t = arange(0.0, 1.0+0.01, 0.01)
s = cos(2*2*pi*t)+2
plot(t, s)

xlabel(r'\textbf{time (s)}')
ylabel(r'\textit{voltage (mV)}',fontsize=16)
title(r"\TeX\ is Number $\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!", fontsize=16, color='r')
grid(True)
savefig('tex_demo')

show()

请注意,启用 TeX/LaTeX 支持后,您可以混合使用文本和数学模式。不支持显示数学模式(\$\$ e=mc^2 \$\$),但添加命令 \displaystyle(如 tex_demo.py 中所示)将产生相同的结果。

为了生成可以嵌入到新 LaTeX 文档中的封装的 PostScript 文件,matplotlib 的默认行为是蒸馏输出,这将删除 LaTeX 中使用的某些在 eps 文件中是非法的 PostScript 运算符。此步骤会生成一些用户可能无法接受的字体。一种解决方法是在您的 rc 设置中将 ps.distiller.res 设置为更高的值(可能是 6000)。更好的解决方法是使用 [http://www.foolabs.com/xpdf/download.html xpdf] 或 [http://poppler.freedesktop.org/ poppler](xpdf 的新后端),可以通过将 rc ps.usedistiller 设置更改为 xpdf 来激活。xpdf 替代方案会生成带有文本的 PostScript,这些文本可以在 Adobe Illustrator 中编辑,或者在转换为 pdf 后进行搜索。

可能的障碍

  • 在 Windows 上,可能需要修改 PATH 环境变量才能找到 latex、dvipng 和 ghostscript 可执行文件。方法是转到控制面板,选择“系统”图标,选择“高级”选项卡,然后单击“环境变量”按钮(有人认为 Linux 很复杂。真是的。)选择 PATH 变量,并添加相应的目录。

  • 使用 MiKTeX 和 Computer Modern 字体,如果您遇到奇怪的 -Agg 和 PNG 结果,请转到 MiKTeX/选项并更新您的格式文件

  • 字体在屏幕上看起来很糟糕。您可能正在运行 Mac OS,并且 Mac 上的 dvipng 有些奇怪。在您的 matplotlibrc 文件中设置 text.dvipnghack : True。

  • 在 Ubuntu 和 Gentoo 上,基础的 texlive 安装不包含 type1cm 包。您可能需要安装一些额外的包才能获得其他 latex 发行版附带的所有功能。

  • Matplotlib 已经取得了一些进展,可以直接使用 dvi 文件进行文本布局。这允许 latex 在 pdf 和 svg 后端以及 *Agg 和 PS 后端使用文本布局。将来,latex 安装可能是唯一的外部依赖项。

如果出现问题

  • 尝试 rm -r ~/.matplotlib/*cache

  • 确保 LaTeX、dvipng 和 ghostscript 都正常工作并且在您的 PATH 中。

  • 以启用详细模式运行您的脚本:python example.py --verbose-helpful(或 --verbose-debug-annoying)并检查输出。很可能那里报告了一个问题。如果您需要帮助,请发布一个可以重现该行为的简短示例,明确说明您对 rc 设置的任何更改,以及您安装的 matplotlib 版本、您的操作系统和 --verbose-* 输出。

章节作者:AndrewStraw,Unknown[117],Unknown[118],Unknown[119]

附件