如何可靠地在matplotlib中指定文本的字体?

时间:2019-07-16 11:10:02

标签: python-3.x matplotlib fonts

我一直在尝试通过以下方式为绘图指定字体:

plt.rcParams['font.family'] = ...
plt.rcParams["mathtext.fontset"] = ...

因此我很头疼。我收到错误消息:

“ C:\ Users \ chris \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ matplotlib \ font_manager.py:1241:UserWarning:findfont:Font family ... not found。回退到DejaVu Sans。”

我的目标是标题:确实可以某种方式以mpl可靠地指定字体。我不在乎我现在要跳多少圈,我只想工作。

据我了解,matplotlib.font_manager()查找系统上所有可用的字体(无论它们来自何处),并为我提供了它们的完整路径。我试图做的是生成从matplotlib.font_manager()获得的每种字体的样本图,并查看是否获得了所需字体的DejaVuSans。

它适用于大约12种字体。 240.起初,我认为也许我和这里有同样的问题: matplotlib does not detect font 但我不应该有评分问题,因为我是从font_manager获得字体名称的,对吧?

在github.com上也有一个解决方案,但是我真的不明白我应该怎么做: https://github.com/matplotlib/matplotlib/issues/13139

这是我的示例代码:

import matplotlib.font_manager
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import _rebuild; _rebuild()
import re


font_paths = matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf')


fonts = [re.search(r'(?<=Fonts\\)\w+', f_path).group() for f_path in font_paths]


for font in fonts:

    df = pd.DataFrame({'perc': pd.Series([45, 35, 10, 5, 3, 2], index=['A', 'B', 'C','D','E','F'])})

    plt.rcParams['font.family'] = font

    fig, ax = plt.subplots(figsize=(7,4))
    df.iloc[::-1].plot(kind='barh', legend = False, ax=ax)
    ax.set_xlabel('Percentage',fontsize=15)
    ax.set_ylabel('Type',fontsize=15)

    plt.savefig(font+'.png')

预先感谢

0 个答案:

没有答案