plt.show()可以找到字体,但是plt.savefig()不能

时间:2017-02-02 18:47:49

标签: python matplotlib fonts

我需要在使用matplotlib进行绘图时使用所需的OTF字体,但无法弄清楚如何访问它。我看到How to use a (random) *.otf or *.ttf font in matplotlib?,但推荐的解决方案都不适用于我。

选项1,我设置prop = matplotlib.font_manager.FontProperties(fname = '/Users/<username>/Library/Fonts/Univers-Condensed.otf')立即发出错误,因为OTF字体没有预期的TTF结构。

选项2,我将系列名称设置为字体的通用名称,找到OTF字体:

plot_font = {'family' : 'Univers-Condensed',
             'size'   : '11'}

matplotlib.rc('font', **plot_font)

plt.plot(range(10))
plt.title('Show me Universe', size = 32)

plt.show()

的Groovy!但是,当我将plt.show()更改为plt.savefig('test.pdf')时,我收到此错误:

UserWarning: findfont: Font family ['Univers-Condensed'] not found.
Falling back to Bitstream Vera Sans
  (prop.get_family(), self.defaultFamily[fontext]))

为什么plt.savefig()无法找到plt.show()可以找到的相同字体?您是否有任何建议以不同的方式接近它?我不想将字体转换为TTF。

1 个答案:

答案 0 :(得分:1)

今天早上我找到了http://www.ascii-code.com/解释,这有助于matplotlib找到用户配置文件中安装的一系列字体。请注意,~/.matplotlib/fontList.py3k.cache~/.matplotlip/tex.cache都需要清除,这一点非常重要。我在最初的尝试中只清除了~/.matplotlib/fontList.py3k.cache

我仍然没有确定为什么plt.show()plt.savefig()在只清除了一个缓存时表现不同,但我现在可以使用我想要的字体保存数字。