【问题标题】:how to set up a custom font with custom path to matplotlib global font?如何使用 matplotlib 全局字体的自定义路径设置自定义字体?
【发布时间】:2016-06-10 15:25:25
【问题描述】:

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

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

要将 global 字体设置为 matplotlib,文档是这样说的:

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

但它只有在字体已经在系统字体路径中时才有效,并且我必须在我的应用程序路径中使用 我的自定义字体 '/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)

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

【问题讨论】:

  • 使用字体管理器,这就是它们的用途。当它们运行时,它们可以使字体在运行中作为系统字体可用,因此您可以在磁盘上按逻辑组织字体,同时在应用程序中使用它们,就像它们是系统级安装一样。
  • 你的意思是 :myfont=fm.FontProperties(fname=fname) ?

标签: python matplotlib fonts


【解决方案1】:

这样解决问题:

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

【讨论】:

  • 帮助很大!我还运行了这个来检查这个post中的“我的自定义字体”[f.name for f in matplotlib.font_manager.fontManager.ttflist]使用什么名称
【解决方案2】:

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()

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 2012-02-19
      • 2011-09-30
      • 1970-01-01
      • 2011-05-17
      • 2013-05-29
      • 2015-11-17
      • 1970-01-01
      相关资源
      最近更新 更多