找出matplotlib使用的字体

时间:2015-01-07 10:58:38

标签: python matplotlib fonts

我正在寻找一种很好的方法来获取matplotlib.pyplot使用的默认字体的名称。 documentation表示从rcParams ['font.family']中的列表中选择字体,该列表按优先级自上而下排序。 我的第一次尝试是检查警告,即

import matplotlib.pyplot as plt
import warnings

for font in plt.rcParams['font.sans-serif']:
    print font
    with warnings.catch_warnings(record=True) as w:
        warnings.simplefilter("always")
        plt.rcParams['font.family'] = font
        plt.text(0,0,font)
        plt.savefig(font+'.png')

        if len(w):
            print "Font {} not found".format(font)

给了我

Bitstream Vera Sans
Font Bitstream Vera Sans not found
DejaVu Sans
Lucida Grande
Font Lucida Grande not found
Verdana
Geneva
Font Geneva not found
Lucid
Font Lucid not found
Arial
Helvetica
Font Helvetica not found
Avant Garde
Font Avant Garde not found
sans-serif

我可以说,在这台机器上,mattlotlib.pyplot使用了DejaVu Sans。 但是,我认为应该有一种更简单的方法来获取这些信息。

修改

可以通过

直接触发警告
matplotlib.font_manager.findfont(matplotlib.font_manager.FontProperties(family=font))

1 个答案:

答案 0 :(得分:12)

获取字体系列:

matplotlib.rcParams['font.family']

如果它是' sans-serif'等常规字体系列,请使用fontfind查找实际字体:

>>> from matplotlib.font_manager import findfont, FontProperties
>>> font = findfont(FontProperties(family=['sans-serif']))
>>> font
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/mpl-data/fonts/ttf/Vera.ttf'

我在font_manager的单元测试中发现了这一点: https://github.com/matplotlib/matplotlib/blob/4314d447dfc7127daa80fa295c9bd56cf07faf01/lib/matplotlib/tests/test_font_manager.py