首页 > 解决方案 > 使用 matplotlib pgf 后端更改字体粗细

问题描述

问题

matplotlib我使用pgf后端创建带有注释的图,以将它们保存为pdf文件。作为字体系列,我使用Fira Sans,效果很好。但是,我无法将重量更改为与粗体不同的东西。

虽然我得到类似的东西

不同的字体粗细

对于agg后端,pgf后端仅区分常规字体和粗体字体:

不同的字体粗细

理想情况下,我会用后端重现agg输出。pgf说明我的问题的mwe是:

import matplotlib as mpl
from matplotlib import pyplot as plt

mpl.use('pgf')
# mpl.use('agg')
fg,ax=plt.subplots(figsize=(1,1))
ax.set_axis_off()
ax.annotate('text1',(0.1,0.9),xycoords='axes fraction',family='Fira Sans',weight='light')
ax.annotate('text1',(0.1,0.7),xycoords='axes fraction',family='Fira Sans',weight='book')
ax.annotate('text1',(0.1,0.5),xycoords='axes fraction',family='Fira Sans',weight='semibold')
ax.annotate('text1',(0.1,0.3),xycoords='axes fraction',family='Fira Sans',weight='bold')

fg.savefig('pgfandfonts.png')

我试过的

我的第一个想法是设置,rc.param pgf.rcfonts=True但这不会影响结果。显然,我也更改了后端,但随后 matplotlib 开始将字体完全嵌入到创建的 pdf 中,这使得它们与使用pgf后端创建的文件相比非常大。

我也尝试直接使用字体的文件名(例如family='FiraSans-light.otf'),但也没有成功。

想法

解决方法

我发现 matplotlib 更喜欢otf不能作为 Type3 子集的类型字体,即使我安装了一个ttf版本。我通过复制所有 ttfssite-packages/matplotlib/mpl-data/fonts/ttf/并运行来解决这个问题

from matplotlib.font_manager import _rebuild; _rebuild()

之后(请参阅此博客条目)。现在文件大小再次相对较小。

但是,这不是原始问题的解决方案,因为当我想嵌入 type1 字体和/或使用 pgf 后端时它不起作用。

标签: pythonmatplotlibfontslatex

解决方案


推荐阅读