我一直在尝试通过以下方式为绘图指定字体:
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')
预先感谢