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

0dxa2lsx  于 2023-04-21  发布在  其他
关注(0)|答案(3)|浏览(223)

我的应用有自定义字体

app_path='/home/user1/myapp'
fname='/home/user1/myapp/font/myfont.ttf'

要在matplotlib中设置globalfont,文档是这样说的:

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

但只有当字体已经在系统字体路径中时才有效,并且我必须在我的应用程序路径中使用我的自定义字体'/home/user 1/myapp/font/myfont.ttf'
我知道有这样一种方法:

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

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

q43xntqr

q43xntqr1#

这样解决了问题:

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也可以是一个字符串,以防您只有一个目录可以导入。

bgtovc5b

bgtovc5b2#

2021年更新

我最近遇到了这个问题,发现这是最简单的处理方法。
添加字体是重要的部分,否则,将无法检测到字体:

import matplotlib.pyplot as plt
from matplotlib import font_manager

font_path = 'Inter-Regular.otf'  # Your font path goes here
font_manager.fontManager.addfont(font_path)
prop = font_manager.FontProperties(fname=font_path)

plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = prop.get_name()

注意,这需要matplotlib〉=3.2。对于旧版本,addfont方法不存在,上面的方法将失败,并返回AttributeError: 'FontManager' object has no attribute 'addfont'

0x6upsns

0x6upsns3#

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

相关问题