matplotlib和latex之间的字体一致

时间:2015-11-26 15:29:35

标签: python matplotlib fonts

我正拼命想找到'最简单的方法'来获取matplotlib数字和乳胶文件中相同的文字。

到目前为止,我的策略是:

  • 为我的Latex数字设置显式宽度,并使用Matplotlib设置相同的大小。这样设置mpl的字体大小等于Latex字体大小应该是第一步

  • 在mpl中使用usetex = True选项。我知道这应该使mpl使用Latex进行图中的所有文本处理(标题,标签,文本,注释等)。

我的问题是,最后我仍然无法按照我的意愿设置字体。

以下是水平轴标签字体与刻度标签明显不同的示例,我确信这与我的乳胶文档的文本完全相同。

以下是生成该图的代码:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

with plt.style.context('journal'):
  fig_size = [3.4, 2.1]
  fig = plt.figure(1, figsize=fig_size)
  ax1 = plt.subplot(111)
  ax1.plot([1,2,3,4,5], '+--')
  ax1.set_xlabel(r'1 2 3 4.0 intensity [$10^{13}p$]')
  plt.tight_layout()
  fig.savefig('test.png') # I saved to png for SO but the goal is eps

我的journal mpl样式表是

backend: PS
text.usetex: True
text.latex.unicode: True
font.family: lmodern # apparently no effect as usetex is true anyway
font.size: 10
axes.titlesize: 10
axes.labelsize: 10
axes.unicode_minus: True
axes.linewidth: 1
legend.fontsize: 10
xtick.labelsize: 10
xtick.major.size: 4
xtick.major.width: 0.5
ytick.labelsize: 10
lines.linewidth: 1.5
lines.markersize: 3
figure.titleweight: normal
savefig.dpi: 600

enter image description here

此外,我甚至不确定我能否选择/从Computer Modern切换到Latin Modern,部分原因是我的眼睛无法区分它们(这在某种程度上使问题无关紧要,但你知道。 ..极客...)。

2 个答案:

答案 0 :(得分:4)

我多年来一直使用它没有问题;只需在text.latex preamble中指定与我在LaTeX文档中使用相同的字体,例如:

import matplotlib.pylab as pl
from matplotlib import rc
rc('text', usetex=True)
rc('font', size=14)
rc('legend', fontsize=13)
rc('text.latex', preamble=r'\usepackage{cmbright}')

pl.figure()
pl.plot([0,1], [0,1], label=r'$\theta_{\phi}^3$')
pl.legend(frameon=False, loc=2)
pl.xlabel(r'change of $\widehat{\phi}$')
pl.ylabel(r'change of $\theta_{\phi}^3$')

enter image description here

编辑我以前从未使用过样式表,但是当我把它放在一个空的样式表中时,这似乎也有效:

text.usetex: True
font.size: 14
legend.fontsize: 13
text.latex.preamble: \usepackage{cmbright}

答案 1 :(得分:0)

似乎由于一些疯狂的原因,字体被切换到 New Century School Book 。请参阅this SO answer

我仍然不确定发生了什么,但似乎font.serif选项的状态会改变行为,而不管font.family中的实际情况如何或在font.serif。这是一个例子(问题中的其他选项):

backend: PS
text.usetex: True
text.latex.unicode: True
font.family: xyzxyz
font.serif: abcabc # Comment this out

其中给出以下内容,其中轴标签使用与刻度标签相同的字体。注释掉font.serif行会产生初始问题的图表。

enter image description here