问题描述
问题
我使用 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.7),weight='book')
ax.annotate('text1',0.5),weight='semibold')
ax.annotate('text1',0.3),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
类型的字体,即使我安装了 ttf
版本,它也不能作为 Type3 的子集。我通过复制 site-packages/matplotlib/mpl-data/fonts/ttf/
中的所有 ttfs 并运行
from matplotlib.font_manager import _rebuild; _rebuild()
之后(见this blog entry)。现在文件大小又相对较小了。
然而,这不是原始问题的解决方案,因为当我想嵌入 type1 字体和/或使用 pgf 后端时它不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)