Enthought Canopy中的Matplotlib字体

时间:2013-11-26 01:26:16

标签: matplotlib ipython canopy

我在Canopy中使用matplotlib库,具体功能是xkcd()。此功能使用特定字体绘制图表。字体是Comic Sans MS,如果不存在,应该下载。

/home/luis/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Humor Sans', 'Comic Sans MS'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))

我使用下面的小脚本,它检查字体的存在/不存在。如果不存在,则下载它。

import os
import urllib2
if not os.path.exists('Humor-Sans.ttf'):
    fhandle = urllib2.urlopen('http://antiyawn.com/uploads/Humor-Sans-1.0.ttf')
    open('Humor-Sans.ttf', 'wb').write(fhandle.read())

问题是我仍然无法显示正确的字体。如果字体缓存出现问题,我会执行以下操作:

luis@luis-VirtualBox:~$ rm /home/luis/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/fontList.cache

获得以下内容:

rm: cannot remove ‘/home/luis/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/fontList.cache’: No such file or directory 

我错过了什么?

3 个答案:

答案 0 :(得分:19)

经过大量的研究,没有找到任何可以帮助我解决问题的人,我能够回答我自己的问题。这就是我所做的:

首先,我在Enthought Canopy的虚拟环境中找到matplotlib中所有字体的确切位置:

luis@luis-VirtualBox:~$ find -iname '*.ttf'

生成一个长列表,结果与此类似:

./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf
./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoBI.ttf
./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf
./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf
./Canopy/appdata/canopy-1.1.0.1371.rh5-x86_64/lib/python2.7/site-packages/canopy/resources/fonts/Inconsolata.ttf

我看不到幽默-Sans-1.0.ttf'文件/字体在任何地方,所以我手动下载并将其复制到目录:

./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/

不过,该图表默认为另一种字体:

Font family ['Humor Sans', 'Comic Sans MS'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))

然后我注意到我下载的字体是' Humor-Sans-1.0.ttf'并且错误消息指的是幽默Sans'和Comic Sans' (没有1.0附录)。所以我在同一个目录中制作了同一个文件的两个副本,并将它们称为“Humor-Sans.ttf'和' Comic-Sans.ttf'分别。

接下来,我找到了matplotlib fontCache列表在我的虚拟环境中的位置:

luis@luis-VirtualBox:~$ find -iname 'fontList.cache'
./.cache/matplotlib/fontList.cache

然后删除缓存:

luis@luis-VirtualBox:~$ rm ./.cache/matplotlib/fontList.cache

之后,我打开了我的Canopy编辑器,打开了一个iPython笔记本,写了一些代码,绘制了一些图表,然后我的字体是正确的!

final output

不是最优雅的解决方案,但它对我有用。

答案 1 :(得分:2)

我有(不幸)要求在Windows环境中工作并遇到同样的问题。对于在Windows中工作的人,我要为此添加的一件事是,它不一定是文件的名称,但重要的是字体的标题。

对于我的问题,请下载helvetica.ttf并将其放入目录

C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

但是,由于该文件的属性将字体标题列为“Helvetica-normal”,我需要确保我指定

font.sans-serif      : Helvetica-normal

在我的matplotlibrc文件中,即使该文件的名称只是“helvetica.ttf”

答案 2 :(得分:2)

这对我有用,并且受益匪浅,我可以在jupyter笔记本中做某事:

只需在python控制台(或您的jupyter笔记本)中键入以下内容:

matplotlib.font_manager._rebuild()