Google Colaboratory matplotlib 图表中的自定义字体
Posted
技术标签:
【中文标题】Google Colaboratory matplotlib 图表中的自定义字体【英文标题】:Custom fonts in Google Colaboratory matplotlib charts 【发布时间】:2019-01-19 12:13:59 【问题描述】:在本地使用 matplotlib 中的自定义字体涉及将.ttf
s 存储在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,每次打开文档时都需要安装软件包吗?