Google Colaboratory matplotlib 图表中的自定义字体

Posted

技术标签:

【中文标题】Google Colaboratory matplotlib 图表中的自定义字体【英文标题】:Custom fonts in Google Colaboratory matplotlib charts 【发布时间】:2019-01-19 12:13:59 【问题描述】:

在本地使用 matplotlib 中的自定义字体涉及将.ttfs 存储在matplotlib/mpl-data/fonts/ttf/ 文件夹中,然后调用mpl.font_manager._rebuild(),然后设置mpl.rcParams['font.sans-serif']

有没有办法在 Google Colaboratory 中执行此操作,但似乎无法访问此 ttf 文件夹?

例如,我想使用Roboto font。安装后,这将使用mpl.rcParams['font.sans-serif'] = 'Roboto' 调用。

【问题讨论】:

【参考方案1】:

ttf 文件夹在这里:

/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf

所以你想在那里下载ttf,例如:

!wget https://github.com/Phonbopit/sarabun-webfont/raw/master/fonts/thsarabunnew-webfont.ttf -P /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf

matplotlib.font_manager._rebuild()
matplotlib.rc('font', family='TH Sarabun New')

2019 年 12 月更新

_rebuild() 不再有效。这是另一种仍然有效的方法。

import matplotlib
import matplotlib.font_manager as fm

!wget https://github.com/Phonbopit/sarabun-webfont/raw/master/fonts/thsarabunnew-webfont.ttf
fm.fontManager.ttflist += fm.createFontList(['thsarabunnew-webfont.ttf'])
matplotlib.rc('font', family='TH Sarabun New')

【讨论】:

谢谢!这是我展示它工作的一个 colab:colab.research.google.com/drive/… 我在这里编辑了完整的答案。你什么时候需要字体也在/usr/share/fonts/truetype/中,就像在你的gist中一样? 我不知道我为什么这样做。我想我尝试了很多东西,直到它起作用并停在那里。顺便说一句,.rc(..) 和设置rcParams 有什么区别?我应该什么时候使用其中一种? 好酷。从matplotlib.org/users/customizing.html#matplotlib-rcparams,rcParams 似乎是默认方法,但是:“matplotlib.rc() 命令可用于一次修改单个组中的多个设置,使用关键字参数:” 几周前我遇到了同样的问题。我已经更新了解决方案。【参考方案2】:

matplotlib 3.2 发布后会更容易。

# For now we must upgrade to 3.2 rc first
# !pip install -U --pre matplotlib  
import matplotlib as mpl
mpl.font_manager.fontManager.addfont('thsarabunnew-webfont.ttf')
mpl.rc('font', family='TH Sarabun New')

【讨论】:

整洁,尽管这仍然需要下载文件。传递 url 不起作用;我提交了matplotlib#15936 来请求这个。【参考方案3】:

想要添加一个当前有效的完整、简洁的答案。

# Download fonts of choice. Here we download Open Sans variants to
# the current directory.
# It's not necessary to download to the share or matplotlib folders:
# /usr/share/fonts/truetype
# /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf
!wget 'https://github.com/google/fonts/raw/master/apache/opensans/OpenSans-Regular.ttf'
!wget 'https://github.com/google/fonts/raw/master/apache/opensans/OpenSans-Light.ttf'
!wget 'https://github.com/google/fonts/raw/master/apache/opensans/OpenSans-SemiBold.ttf'
!wget 'https://github.com/google/fonts/raw/master/apache/opensans/OpenSans-Bold.ttf'
from matplotlib import font_manager as fm, pyplot as plt

# Pick up any fonts in the current directory.
# If you do end up downloading the fonts to /usr/share/fonts/truetype,
# change this to: fm.findSystemFonts()
font_files = fm.findSystemFonts('.')

# Go through and add each to Matplotlib's font cache.
for font_file in font_files:
    fm.fontManager.addfont(font_file)

# Use your new font on all your plots.
plt.rc('font', family='Open Sans')

注意,有几次这不能正常工作,并且没有显示请求的字体(即使没有显示错误或警告)。如果发生这种情况,请尝试将 Colab 运行时恢复出厂设置并再次运行。

【讨论】:

以上是关于Google Colaboratory matplotlib 图表中的自定义字体的主要内容,如果未能解决你的问题,请参考以下文章

使用本地 GPU 的 Google Colaboratory 本地运行时

Colaboratory:我可以访问我的 Google 云端硬盘文件夹和文件吗?

将数据导入 Google Colaboratory

使用 Google 的 Colaboratory,每次打开文档时都需要安装软件包吗?

从Google Colaboratory访问Google Team Drive中的数据

使用 Google Colaboratory 时未显示图表 [重复]