text.usetex的好处是什么:在matplotlib中为True

时间:2014-01-25 02:39:33

标签: python matplotlib latex

我打算写一篇论文,并开始设置一个标准的Matplotlib文件来控制绘图格式。但是,我遇到了text.usetex : True选项的问题。特别是,当我的所有数字都应该是sans-serif时,刻度标签默认为serif字体是令人恼火的。确实 - 我在rcParams文件中将font.family设置为sans-serif但仍然看到问题,如github here中所述。

此外,当我usetex打开或关闭时,其他文字看起来不同 - 这似乎令人惊讶,因为我告诉matplotlib每次都使用相同的字体。

因此,我想知道使用LaTeX渲染的实际好处是什么?由于Matplotlib已经可以处理xlabel('\alpha')等标签中的LaTeX命令,并且可以接受用户输入到rcparams文件的字体,那么在文本上使用LaTeX会有什么不同呢?

为了实现一致的sans-serif字体的目标,我不能只将matplotlib rcparams文件中的font.sans-serif设置为我在LaTeX中设置为sans-serif字体的字体吗?

感谢您提出任何建议或提示!

2 个答案:

答案 0 :(得分:4)

当您需要在matplotlib的内置mathtext中不存在的LaTeX功能时,usetex设置特别有用。但它也提供了更好的排版,你不必担心非标准的数学文本部分。

如果你比较下面两个例子(基于this page末尾的例子),你会发现LaTeX版本在数学方面做得更好,尤其是求和。此外,mathtext不了解\displaystyle但是自动使用这种布局样式,这在某些情况下可能是不受欢迎的。

就您使用刻度标签字体的问题而言,我相信matplotlib正在使用默认的LaTeX数学字体作为标签。如果您按照我在第二个示例中注释掉的代码行,我们应该能够得到您想要的内容。

如果你只是制作相对简单的情节,你应该看看matplotlib2tikz。它允许您以tikz格式保存数字,以便轻松调整大小。有关详细信息,请参阅我对this问题的回答。


mathtext版

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)

plt.plot(t,s)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
         fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.savefig('fig_mathtext.pdf')

enter image description here

LaTeX版本

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('text', usetex=True)
#rc('text.latex', preamble=r'\usepackage[eulergreek]{sansmath}\sansmath')

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)

figure()

plt.plot(t,s)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\displaystyle\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
         fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.savefig('fig_latex.pdf')

enter image description here

答案 1 :(得分:2)

使用usetex的好处包括排版matplotlib内置引擎不支持的复杂公式,以及使用(官方不支持的)text.latex.preamble设置包含任意前导码的功能。如果您将matplotlib图形嵌入LaTeX文档并希望精确匹配字体,则后者非常有用,例如:因为期刊样式表。但对于大多数用途,我建议使用内置的mathtext渲染器。