【问题标题】:How to get a list of all the fonts currently available for Matplotlib?如何获取当前可用于 Matplotlib 的所有字体的列表?
【发布时间】:2012-01-06 05:38:14
【问题描述】:

例如当我想在

中设置font
matplotlib.rc('font', **font)

谢谢。

【问题讨论】:

  • 显然这些都不会列出~/anaconda/lib/pythonX.X/site-packages/matplotlib/mpl-data/fonts/ttf 中的mpl-data 目录中可用的字体(尝试import matplotlib; matplotlib.matplotlib_fname() 以获取确切位置)。尽管使用fname=<font> 在此位置加载字体是成功的。有没有人会这样做的答案?

标签: python matplotlib


【解决方案1】:
import matplotlib.font_manager
matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf')

查看this 了解其他选项。

【讨论】:

  • 酷,谢谢!顺便说一句:显然你必须 import matplotlib.font_manager 让事情发生;-)
  • 另外,指定的参数是默认值,所以matplotlib.font_manager.findSystemFonts() 返回相同的东西。
  • 知道如何获取已安装字体系列的名称而不是单个文件的名称吗?
【解决方案2】:

要获得matplotlib 可用的(可读的)字体列表:

import matplotlib.font_manager
flist = matplotlib.font_manager.get_fontconfig_fonts()
names = [matplotlib.font_manager.FontProperties(fname=fname).get_name() for fname in flist]
print names

documentation推荐get_fontconfig_fonts()

这是一种获取用户想要制作的所有字体的简单方法 可用于应用程序,而无需知道所有应用程序的位置 居住。

请注意,您可以使用 FontProperties 类轻松获取(反向)名称以进行字体查找:

font = matplotlib.font_manager.FontProperties(family='TeX Gyre Heros')
file = matplotlib.font_manager.findfont(font)

findfont 很健壮,因为如果找不到匹配的属性,它会返回默认字体。

【讨论】:

  • 很好,谢谢。看起来这个给出了实际的 callable names 而接受的答案显示了实际的 .ttf 文件。不幸的是,无论出于何种原因这在我的 macbook (MacOS Sierra) 上失败,但可以在我使用的一些远程 Linux 服务器上运行。接受的答案无处不在。
  • 给出错误“RuntimeError: In FT2Font: Can not load face. Unknown file format.”
  • 返回空列表 Python 3.8.3 + matploblib 3.3.2
【解决方案3】:

根据this blog post,此代码将为您提供可用的字体和示例:

import matplotlib.font_manager
from IPython.core.display import HTML

def make_html(fontname):
    return "<p>{font}: <span style='font-family:{font}; font-size: 24px;'>{font}</p>".format(font=fontname)

code = "\n".join([make_html(font) for font in sorted(set([f.name for f in matplotlib.font_manager.fontManager.ttflist]))])

HTML("<div style='column-count: 2;'>{}</div>".format(code))

例如:

【讨论】:

  • 这至少在 Google Colab 中对我不起作用。似乎 Matplotlib 字体不一定在 Matplotlib 之外可用?
  • 这很酷!
【解决方案4】:

接受的答案仅提供您机器上字体的路径列表,而不是您可以传递给rcParams的字体名称。 @Alodi 的回答解决了这一点,但已经过时了。

在 Python 3.8.8 和 Matplotlib 3.3.4 中,您可以使用以下内容:

import matplotlib.font_manager
fpaths = matplotlib.font_manager.findSystemFonts()

for i in fpaths:
    f = matplotlib.font_manager.get_font(i)
    print(f.family_name)

它打印一个字体名称列表:

Padauk Book
Laksaman
Waree
Umpush
Latin Modern Roman Demi
Tlwg Mono
Gubbi
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 2013-11-05
    • 2020-04-26
    • 2013-09-20
    • 2017-12-23
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多