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

Python 如何使用matplotlib全局字体的自定义路径设置自定义字体?,python,matplotlib,fonts,Python,Matplotlib,Fonts,我的应用程序中有一个自定义字体 app_path='/home/user1/myapp' fname='/home/user1/myapp/font/myfont.ttf' 要将globlal字体设置为matplotlib,文档如下所示: plt.rcParams['font.sans-serif']=['xxx font'] fname='/home/user1/myapp/font/myfont.ttf' myfont=fm.FontProperties(fname=fname) ax1

我的应用程序中有一个自定义字体

app_path='/home/user1/myapp'
fname='/home/user1/myapp/font/myfont.ttf'
要将globlal字体设置为matplotlib,文档如下所示:

plt.rcParams['font.sans-serif']=['xxx font']
fname='/home/user1/myapp/font/myfont.ttf'
myfont=fm.FontProperties(fname=fname)
ax1.set_title('title test',fontproperties=myfont)
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'
但它仅在字体已经在系统字体路径中时才起作用,并且我必须在我的应用程序路径中使用我的自定义字体“/home/user1/myapp/font/myfont.ttf”

我知道有一种方法是这样的:

plt.rcParams['font.sans-serif']=['xxx font']
fname='/home/user1/myapp/font/myfont.ttf'
myfont=fm.FontProperties(fname=fname)
ax1.set_title('title test',fontproperties=myfont)
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'

但这不是我想要的,我不想一直设置“fontproperties”,因为有很多代码需要更改

解决了这样的问题:

plt.rcParams['font.sans-serif']=['xxx font']
fname='/home/user1/myapp/font/myfont.ttf'
myfont=fm.FontProperties(fname=fname)
ax1.set_title('title test',fontproperties=myfont)
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也可以是字符串,以防您只有一个目录可从中导入。

对于较新的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'

使用字体管理器,这就是它们的用途。当它们运行时,它们可以使字体作为系统字体随时可用,因此您可以在磁盘上保持字体的逻辑组织,同时在应用程序中使用它们,就好像它们是系统级安装的一样。您的意思是:myfont=fm.FontProperties(fname=fname)?这很有帮助!我还运行了此命令,以检查“我的自定义字体”的确切名称
[f.name for f in matplotlib.font\u manager.fontManager.ttflist]