希腊字母在 matplotlib latex 输出中以粗体打印

Greek letters are printed bold in matplotlib latex output

我在 matplotlib 中使用乳胶输出来打印轴和图例的希腊符号。 (衬线)文本以正常字体粗细打印,但一些特殊字符以粗体打印。特别是,我指的是微的 mu,也是埃的(非希腊语)符号。但是,其他希腊符号如欧米茄可以正常打印。我做了一个小例子来演示:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import matplotlib as mpl
import matplotlib.pyplot as plt


mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.unicode'] = True

mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['text.latex.preamble'] = [
    r"\usepackage{textgreek}",
    r"\usepackage{siunitx}"]


fig = plt.figure()

plt.plot([1, 2, 4], [0, 9, 7])
plt.xlabel(
    r"\si{\micro\metre} " +
    r"\si{\omega\metre} " +
    r"\si{\nano\metre} " +
    r"\si{\angstrom} " +
    r"\si{\micro\metre}\textmu")
plt.show()

fig.savefig('test.png')
fig.savefig('test.pdf')

我在实时输出、矢量输出和图像输出方面遇到了这个问题。让我感到困惑的是,我在工作中的过时 Ubuntu 机器上使用了一个月的脚本,但安装了 python 3.3。现在我尝试 运行 我个人的 Arch 机器上的脚本,但我遇到了问题。

看来是你安装的字体有问题,在我的例子中,我可以通过以下命令指定我想使用的字体来解决这个问题:

mpl.rcParams['font.serif'] = 'Times'

可在此处找到可用字体列表:http://matplotlib.org/users/customizing.html

对不起,正如 Achim 所说,我应该在这里发布我的解决方案。

没什么特别的,只是我在 Arch 上安装的字体有点搞砸了。但是我也在我的文档中使用的 Palatino 字体运行良好,所以我决定在 Pyplot 中也使用它。这是我在 Pyplot 中的标准字体配置的样子:

import matplotlib as mpl

mpl.rcParams['legend.fontsize'] ="large"
mpl.rcParams['axes.labelsize'] = "x-large"
mpl.rcParams['lines.linewidth'] = 2

mpl.rcParams['xtick.labelsize'] = "x-large"
mpl.rcParams['ytick.labelsize'] = "x-large"

mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.unicode'] = True
mpl.rcParams['text.latex.preamble'] = r"\usepackage{textcomp}" + \
    r"\usepackage{textgreek}" +\
    r"\usepackage{subscript}" +\
    r"\usepackage{siunitx}" +\
    r'\usepackage{amsmath}' +\
    r"\usepackage[osf]{mathpazo}"

mpl.rcParams['font.family'] = "Palatino"

一个简短的评论:我在 mathpazo 包中使用旧式图形。这对方程式和科学数字不是很有用。如果你也想使用旧式图形,我真的建议你使用 SIunitx 包(无论如何我建议它),避免使用 osf。

如果您想避免使用 osf 作为独立数字,只需使用 \num{123},或与单位 \SI{123}{\celsius\per\square\hour}

一起使用