Python 使用matplotlib pgf后端更改字体大小 问题

Python 使用matplotlib pgf后端更改字体大小 问题,python,matplotlib,fonts,latex,Python,Matplotlib,Fonts,Latex,我使用pgf后端在matplotlib中创建带有注释的绘图,将其保存为pdf文件。作为字体系列,我使用Fira Sans,这很好用。然而,我不能改变重量的东西比大胆的不同 而我得到的是 对于agg后端,pgf后端仅区分普通字体和粗体字体: 理想情况下,我会使用pgf后端重现agg输出。说明我的问题的mwe是: import matplotlib as mpl from matplotlib import pyplot as plt mpl.use('pgf') # mpl.use('agg

我使用
pgf
后端在
matplotlib
中创建带有注释的绘图,将其保存为
pdf
文件。作为字体系列,我使用Fira Sans,这很好用。然而,我不能改变重量的东西比大胆的不同

而我得到的是

对于
agg
后端,
pgf
后端仅区分普通字体和粗体字体:

理想情况下,我会使用
pgf
后端重现
agg
输出。说明我的问题的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后端,并在
    pgf.序言中使用
    xelatex/fontspec
    和适当的
    \renewcommand
  • 有一种方法可以避免使用其他后端(例如仅包含部分字体)时的巨大文件大小
变通办法 我发现matplotlib更喜欢
otf
类型字体,尽管我安装了
ttf
版本,但它不能作为Type3的子集。我通过复制
站点包/matplotlib/mpl data/fonts/ttf/
中的所有ttf并运行

from matplotlib.font_manager import _rebuild; _rebuild()
之后(见)。现在文件大小又相对较小了

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