Matplotlib font_manager.py 字体查找错误

Matplotlib font_manager.py 字体查找错误

在 Ubuntu 12.04 机器上,每当我绘制某些内容时,都会出现如下错误:

/usr/lib/pymodules/python2.7/matplotlib/font_manager.py:1228: UserWarning: findfont: 无法匹配 :family=Bitstream Vera Sans:style=normal:variant=normal:weight=medium:stretch=normal:size=x-large。返回 /usr/share/matplotlib/mpl-data/fonts/ttf/cmb10.ttf

我在网上找不到解决方案。以下代码重现了错误

import pylab as plt
plt.plot(np.random.random((128)))
plt.title("This should be monospaced")
plt.savefig("/tmp/testfig.pdf")

并且 matplotlib 自我测试也给出了以下错误:

python -c "import matplotlib as m ; m.test(verbosity=1)"

~/.matplotlib/matplotlibrc我有:

font.family         : monospace
font.style          : normal
font.variant        : normal
font.weight         : medium
font.stretch        : normal
font.size           : 10.0
font.serif          : Palatino, Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Charter, serif
font.sans-serif     : Helvetica, Bitstream Vera Sans, sans-serif
font.monospace      : Monaco, Ubuntu Mono Regular, Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Fixed, Terminal, monospace

有些事情对我来说不能解决问题:

  1. ~/.matplotlib/删除(例如matplotlibrcfontList.cachetex.cache/)中的文件
  2. 更改font.family属性~/.matplotlib/matplotlibrc
  3. 重新安装 matplotlibapt-get purge

我使用的版本是:

  • matplotlib 1.1.1~rc1+git20120423-0ubuntu1
  • Python 2.7.3
  • IPython 0.12.1
  • Ubuntu 12.04

答案1

在对字体包进行一些调整后,对我来说解决方案是安装以下包:

libsys-cpu-perl pcf2bdf tex-gyre ttf-bitstream-vera tv-fonts xfonts-traditional

我不确定这为什么有用,所以也许有人可以补充一些背景知识来解释这为什么有用。希望这能帮助别人。

答案2

matplotlib始终使用自己的一套字体,独立于系统上安装的其他字体。在 Ubuntu 12.04 LTS 上,这些字体位于/usr/share/matplotlib/mpl-data/fonts/

当在代码中调用此目录中不可用的字体时,matplotlib将首先尝试回退到 Bitstream Vera Sans。但是,该字体在.../mpl-data/fonts/Ubuntu 12.04 LTS 安装中不可用。最后,matplotlib回退到cmb10.ttf可用的字体。

按照上述建议安装系统字体包无法解决此警告。

但是,可以添加rcParams['mathtext.fontset'] = 'cm'代码以避免多次回退和警告。

或者,指定 中存在的字体/usr/share/matplotlib/mpl-data/fonts/

答案3

对于我在 OSX 上的情况,由于管理员限制,导致字体位置混乱,我的 Python 安装在我的主目录中。我能够按照以下步骤使 Helvetica 正常工作: http://blog.olgabotvinnik.com/blog/2012/11/15/2012-11-15-how-to-set-helvetica-as-the-default-sans-serif-font-in/

  1. 下载并安装 Fondu 以将 Mac-Helvetica 转换为 ttf-Helvetica。使用 homebrew,可以使用以下命令完成此操作:brew install fondu

  2. 在你的系统上找到 Helvetica。对我来说,/System/Library/Fonts/Helvetica.dfont

  3. 查找 matplotlib 存储数据的位置。用于python import matplotlib; matplotlib.matplotlib_fname()打印目录。

  4. 将 .ttf 放入:your_matplotlib_dir/matplotlib/mpl-data/fonts/ttf然后sudo fondu -show /System/Library/Fonts/Helvetica.dfont

  5. 编辑 .matplotlibrc 文件。将原始 .matplotlibrc 文件复制到个人目录中,这样在更新 matplotlib 时它就不会被覆盖。$ cp your_matplotlib_dir/matplotlib/mpl-data/matplotlibrc ~/.matplotlib/matplotlibrc

  6. 找到该行:#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif然后取消注释并将 Helvetica 移到前面。font.sans-serif : Helvetica, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

答案4

可能没有加载您的matplotlibrc配置文件。请确保它位于正确的位置。 文档列出了搜索的几个位置。尝试将其放在以下位置之一:

  • python 进程的当前工作目录
  • ~/.config/matplotlib/matplotlibrc

后者实际上对于我的 Debian 7 不起作用,但也不工作~/.matplotlib/matplotlibrc

相关内容