我可以使用matplotlib应用程序分发一个额外的字体文件吗?

时间:2013-12-09 22:32:14

标签: matplotlib

我正在编写一个使用matplotlib的Python程序。我想使用matplotlib不包含的字体。 (好吧,我想使用Lucida Grande,它包含在OS X中,但是matplotlib can’t read the .dfont file directly所以我需要发布我自己的.ttf字体。)

似乎matplotlib只在一个目录中查找字体:mpl-data/fonts。可以tweak matplotlib’s configuration更改mpl-data目录的位置,但似乎不可能指定多个这样的目录,其中可以找到字体。那是准确的吗?

(我可以将字体放在我系统的全局mpl-data目录中,但是对于一个应用程序来说,使用全局使用的目录这样做是错误的。我当然不会我想在我的应用程序中包含整个mpl-data - 加一文件。)

1 个答案:

答案 0 :(得分:2)

一种可能性是扩展使用matplotlib herefont manager module提供的响应。具体来说,看起来您可以使用fname matplotlib.font_manager.FontProperties参数指定字体的绝对路径(请参阅此处的文档:http://matplotlib.org/api/font_manager_api.html#matplotlib.font_manager.FontProperties

修改以前的SO响应(稍微简单的问题),如果您可以在工作流程中指定ttf字体文件的绝对路径,这当然值得一试。我在下面使用了内置的MacOS字体(并且可以工作),但也许可以尝试替换您特定的绝对路径&字体,看它是否有效。

import matplotlib
matplotlib.use( "agg" ) #some backend sensitivity explained in previous SO response
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

fig, ax = plt.subplots()
#specify the absolute path to your font file:
absolute_path_to_ttf_file = '/opt/X11/share/fonts/TTF/VeraSe.ttf'
prop = fm.FontProperties(fname=absolute_path_to_ttf_file)    
ax.set_title('Text in a cool font', fontproperties=prop, size=40)
plt.show()
plt.savefig('test.png')

enter image description here