我正在使用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()
我对示例轴标签感到满意,除了α和μ之外,它们都是以默认的LaTeX serif字体呈现的。
我所看到的其他一些问题的答案,包括更改各种rc设置,这些都无法解决我的问题:
我见过的唯一一个似乎可以做我想要的例子是here(比较第一个和最后一个数字),但这需要修改matplotlibrc文件。这不适合我的目的;无论如何,如果不能根据需要在代码中设置它,我会感到惊讶。
(1)如何修改上述代码,以便希腊字母以与图中其余文本相同的无衬线字体显示?*
(2)是否可以使用Matplotlib的内置mathtext完成所有这些操作而不是依赖外部LaTeX安装?
非常感谢任何建议。
答案 0 :(得分:1)
好吧,在玩了rcParams一段时间之后,我偶然发现了一种实现我想要的方式
\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()
请注意,我必须在此特定示例中使用y轴标签来使间距均匀。