未找到 matplotlib 字体

Posted

技术标签:

【中文标题】未找到 matplotlib 字体【英文标题】:matplotlib font not found 【发布时间】:2014-11-23 00:25:30 【问题描述】:

我正在尝试在我的 matplotlib 绘图中使用“Heuristica”字体,但它不会显示出来。

我在 rcParameter font.serif 的第一个位置定义了“Heuristica” --> 没有结果

我将 font.family 更改为“Heuristica”并收到消息

findfont: FontFamily not found

这让我开始思考,因为 Heuristica 已安装,我可以从其他软件毫无问题地访问它。所以我使用了 fontManager 并做了:

import pylab as pl
la = pl.matplotlib.font_manager.FontManager()
lu = pl.matplotlib.font_manager.FontProperties(family = 'Heuristica')
la.findfont(lu)

得到:

Out[7]: 'C:\\Windows\\Fonts\\Heuristica-Regular.otf'

显然可以找到 Heuristica。 我查找了可用的 ttf 字体 (How can i get list of font family(or Name of Font) in matplotlib),但 Heuristica 不在此列表中。

如果有任何帮助,我会很高兴。

【问题讨论】:

你用的是什么版本的mpl? 我使用的是 1.3.1 版 尝试更新到 1.4.0。如果这不起作用,请在 github 上提出问题 在 1.4.0 下问题依然存在。你确定这真的是 Github 的问题,而不是我电脑前的人的问题吗?关于 github 问题:我可以链接到这个问题还是复制粘贴? 请提供足够的信息是我们不必链接回 SO 的问题。这里的问题不稳定(由于编辑和删除)。请提供足够的详细信息,以便使用 Windows 机器的人可以重现它(包括您是否更改了 rcparam 文件和 full 回溯)。 【参考方案1】:

嗯,mdboom 在github 解决了问题,功劳归他所有:

当您向系统添加新字体时,您需要删除 fontList.cache 文件以便 matplotlib 找到它们。

它在您的示例中的第 4/5 行工作的原因是因为您正在从头开始创建一个 FontManager(它进入文件系统并搜索所有字体)。在内部,当 matplotlib 稍后进行自己的字体查找时,它使用的是从 fontList.cache 文件中的磁盘缓存加载的 FontManager。

从长远来看,我们计划改用操作系统的字体查找机制来解决这个问题(参见 MEP14),但与此同时,您需要在每次需要时删除 fontList.cache 文件matplotlib 来发现新字体。

文件 fontList.cache 位于您的用户文件夹 --> .matplotlib/fontList.cache,对于 Windows 通常为 C:\Users\yourUsername\.matplotlib\fontList.cache

【讨论】:

~/.cache/matplotlib 在 Ubuntu 上。 但是还是不行,字体管理器找不到合适的字体。 我只在windows上试过这个解决方案,不能在Linux上测试。但也许您想在 github 问题中添加一些内容,这可能是获得错误修复的最佳方式:github.com/matplotlib/matplotlib/issues/3590 我还不得不删除fontList.json 强制matplotlib重建缓存可能是import matplotlib.font_manager as font_manager; font_manager._rebuild()最跨平台的解决方案

以上是关于未找到 matplotlib 字体的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 matplotlib(python)中的字体?

如何在 matplotlib 中更改图例字体名称

%Matplotlib - AttributeError: 'NoneType' 对象没有属性 'lower'

更改 matplotlib 图例中各个标签的字体大小

如何配置matplotlib以便能够从本地路径读取字体?

无法从脚本加载 matplotlib.pyplot