在 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
有些事情对我来说不能解决问题:
~/.matplotlib/
删除(例如matplotlibrc
、fontList.cache
、tex.cache/
)中的文件- 更改
font.family
属性~/.matplotlib/matplotlibrc
- 重新安装 matplotlib
apt-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/
下载并安装 Fondu 以将 Mac-Helvetica 转换为 ttf-Helvetica。使用 homebrew,可以使用以下命令完成此操作:
brew install fondu
。在你的系统上找到 Helvetica。对我来说,
/System/Library/Fonts/Helvetica.dfont
查找 matplotlib 存储数据的位置。用于
python import matplotlib; matplotlib.matplotlib_fname()
打印目录。将 .ttf 放入:
your_matplotlib_dir/matplotlib/mpl-data/fonts/ttf
然后sudo fondu -show /System/Library/Fonts/Helvetica.dfont
编辑 .matplotlibrc 文件。将原始 .matplotlibrc 文件复制到个人目录中,这样在更新 matplotlib 时它就不会被覆盖。
$ cp your_matplotlib_dir/matplotlib/mpl-data/matplotlibrc ~/.matplotlib/matplotlibrc
找到该行:
#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
。