我在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
我错过了什么?
答案 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笔记本,写了一些代码,绘制了一些图表,然后我的字体是正确的!
不是最优雅的解决方案,但它对我有用。
答案 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()