我在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]))
Run Code Online (Sandbox Code Playgroud)
我使用下面的小脚本,它检查字体的存在/不存在.如果不存在,则下载它.
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())
Run Code Online (Sandbox Code Playgroud)
问题是我仍然没有得到正确的字体来显示.如果字体缓存出现问题,我会执行以下操作:
luis@luis-VirtualBox:~$ rm /home/luis/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/fontList.cache
Run Code Online (Sandbox Code Playgroud)
获得以下内容:
rm: cannot remove ‘/home/luis/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/fontList.cache’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我的应用程序中有一个自定义字体
app_path='/home/user1/myapp'
fname='/home/user1/myapp/font/myfont.ttf'
Run Code Online (Sandbox Code Playgroud)
要将globlal字体设置为matplotlib,文档会这样说:
plt.rcParams['font.sans-serif']=['xxx font']
Run Code Online (Sandbox Code Playgroud)
但它只适用于已经在系统字体路径中的字体,我必须在我的应用程序路径 '/home/user1/myapp/font/myfont.ttf'中使用我的自定义字体
我知道有这样的方式:
fname='/home/user1/myapp/font/myfont.ttf'
myfont=fm.FontProperties(fname=fname)
ax1.set_title('title test',fontproperties=myfont)
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的,我不想一直设置' fontproperties ',因为有一些代码要改变
所以我已经尝试了几乎所有我能在 stackoverflow 上找到的东西(以及谷歌会引导我的其他任何地方);我就是不能改变该死的字体!
这是我迄今为止尝试过的非详尽清单:
按照这个问题中的建议尝试:
import matplotlib.pyplot as plt
csfont = {'fontname':'Times New Roman'}
x = [1,2,3]
y = x
plt.plot(x,y)
plt.title('Please be Times >__<',**csfont)
plt.show()
Run Code Online (Sandbox Code Playgroud)
给我这个错误日志:
>>> (executing file "<tmp 1>")
Note on using QApplication.exec_():
The GUI event loop is already running in the pyzo kernel, and exec_()
does not block. In most cases your app should run fine without the need
for modifications. For clarity, this is what the pyzo kernel does:
- Prevent deletion of …Run Code Online (Sandbox Code Playgroud)