python - 使用 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'
),但也没有成功。
想法
- 我可以放入一些包/设置,它们可以
pgf.preample
与 matplotlib 一起神奇地工作 - 我找到了一种方法如何将字体的文件名路径到 pgf 后端
xelatex/fontspec
并\renewcommand
在pgf.preamble
- 有一种方法可以避免使用其他后端的巨大文件大小,例如仅包括部分字体
解决方法
我发现 matplotlib 更喜欢otf
不能作为 Type3 子集的类型字体,即使我安装了一个ttf
版本。我通过复制所有 ttfssite-packages/matplotlib/mpl-data/fonts/ttf/
并运行来解决这个问题
from matplotlib.font_manager import _rebuild; _rebuild()
之后(请参阅此博客条目)。现在文件大小再次相对较小。
但是,这不是原始问题的解决方案,因为当我想嵌入 type1 字体和/或使用 pgf 后端时它不起作用。
解决方案
推荐阅读
- javascript - Javascript error when trying to set a variable with PUG variable that doesn't exists
- git - 哈士奇预推钩构建前
- flutter - 从 Firebase 存储中获取图像不起作用
- reactjs - 当原因是“create-option”时取消 MUI Autocomplete onChange
- stm32 - 写入寄存器 - stm32 中的命名约定
- opengl - opngl中的“旋转算法”不起作用
- python - 文件格式为“obj”或“height”的 3D 对象的 geht 宽度
- python - 遍历列表列表以创建新列表列表
- sql - 将选择从特定日期到今天的时间范围的查询
- c - 使用 sscanf 解析子字符串/浮点数