如何设置Matplotlib以sans-serif字体呈现希腊字母

时间:2018-01-26 01:18:25

标签: python matplotlib tex

我正在使用Python(2.7)和Matplotlib(1.4.3)生成一些图,并希望我的图中的所有文本都是无衬线字体。我使用外部LaTeX和 sfmath 包实现的最佳效果无法在sans-serif中设置希腊字母。这在以下MWE中得到证明:

import matplotlib.pyplot as plt
from matplotlib import rc

rc('text', usetex=True)
rc('text.latex', preamble=r'\usepackage{sfmath}')

fig, ax = plt.subplots()
ax.plot([0,1,2], [2,5,9]) #arbitrary data
ax.set_xlabel(r'$x$ (m)', fontsize=16)
ax.set_ylabel(r'$y = \alpha(x)x^2 - 2\mu$', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16, pad=8)
fig.tight_layout()
fig.show()

[Output of above code (.png)]

我对示例轴标​​签感到满意,除了α和μ之外,它们都是以默认的LaTeX serif字体呈现的。

我所看到的其他一些问题的答案,包括更改各种rc设置,这些都无法解决我的问题:

我见过的唯一一个似乎可以做我想要的例子是here(比较第一个和最后一个数字),但这需要修改matplotlibrc文件。这不适合我的目的;无论如何,如果不能根据需要在代码中设置它,我会感到惊讶。

(1)如何修改上述代码,以便希腊字母以与图中其余文本相同的无衬线字体显示?*

(2)是否可以使用Matplotlib的内置mathtext完成所有这些操作而不是依赖外部LaTeX安装?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

好吧,在玩了rcParams一段时间之后,我偶然发现了一种实现我想要的方式

  • 不需要外部LaTeX安装
  • 不需要手动编辑matplotlibrc文件
  • 默认情况下呈现数字文本,包括斜体sans-serif字体的希腊字母
  • 使用\mathrm{}
  • 呈现包含非斜体无衬线字体中的希腊字母的数学文本

rcParams设置更改为:

import matplotlib as mpl
import matploblit.pyplot as plt

mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'Arial'
mpl.rcParams['mathtext.fontset'] = 'custom'
mpl.rcParams['mathtext.rm'] = 'sans'
mpl.rcParams['mathtext.it'] = 'sans:italic'
mpl.rcParams['mathtext.default'] = 'it'

fig, ax = plt.subplots()
ax.plot([0,1,2], [2,5,9])
ax.set_xlabel(r'$x$ (m)', fontsize=16)
ax.set_ylabel(r'$y = \alpha$($x$)$x^2-$ $2\mu$', fontsize=16)
ax.set_title(r'Some non-italics: $\mathrm{\alpha, \beta, \gamma}$', fontsize=20)
ax.tick_params(axis='both', which='major', labelsize=16, pad=8)
fig.tight_layout()
fig.show()

[Output of above code (.png)]

请注意,我必须在此特定示例中使用y轴标签来使间距均匀。