如何设置自定义字体与matplotlib全局字体的自定义路径?

时间:2016-02-27 09:45:06

标签: python matplotlib fonts

我的应用

中有自定义字体
app_path='/home/user1/myapp'
fname='/home/user1/myapp/font/myfont.ttf'

要将 globlal 字体设置为matplotlib,文档会这样说:

plt.rcParams['font.sans-serif']=['xxx font']

但它只适用于已经在系统字体路径中的字体,并且我必须在我的应用程序路径中使用我的自定义字体'/ home / user1 / myapp / font / myfont.ttf'< / p>

我知道有这样的方式:

fname='/home/user1/myapp/font/myfont.ttf'
myfont=fm.FontProperties(fname=fname)
ax1.set_title('title test',fontproperties=myfont)

但这不是我想要的,我不想一直设置' fontproperties ',因为有一些代码要改变

2 个答案:

答案 0 :(得分:11)

解决了这样的问题:

import matplotlib.font_manager as font_manager

font_dirs = ['/my/custom/font/dir', ]
font_files = font_manager.findSystemFonts(fontpaths=font_dirs)
font_list = font_manager.createFontList(font_files)
font_manager.fontManager.ttflist.extend(font_list)

mpl.rcParams['font.family'] = 'My Custom Font'

如果您只有一个要导入的目录,fontpaths kwarg也可以是一个字符串。

答案 1 :(得分:5)

对于较新的 matplotlib 模块(例如版本 >=3.2)
createFontList 已弃用。

但是,您可以使用ttf文件路径和自定义名称制作字体条目,
然后将其添加到 fontManager.ttflist,并将 matplotlib.rcParams['font.familt'] 分配给该名称。
现在您可以开始制作没有 'fontproperties' 等的绘图

import matplotlib as mpl
import matplotlib.font_manager as fm

fe = fm.FontEntry(
    fname='your custom ttf file path',
    name='your custom ttf font name')
fm.fontManager.ttflist.insert(0, fe) # or append is fine
mpl.rcParams['font.family'] = fe.name # = 'your custom ttf font name'