我想爲演示文稿生成高質量的圖表。我正在使用Python的matplotlib來生成圖形。不幸的是,PDF導出似乎忽略了我的字體設置。Matplotlib PDF導出使用錯誤的字體
我嘗試通過將FontProperties
對象傳遞給文本繪圖函數並全局設置選項來設置字體。爲了記錄在案,這裏是重現該問題的MWE:
import scipy
import matplotlib
matplotlib.use('cairo')
import matplotlib.pylab as pylab
import matplotlib.font_manager as fm
data = scipy.arange(5)
for font in ['Helvetica', 'Gill Sans']:
fig = pylab.figure()
ax = fig.add_subplot(111)
ax.bar(data, data)
ax.set_xticks(data)
ax.set_xticklabels(data, fontproperties = fm.FontProperties(family = font))
pylab.savefig('foo-%s.pdf' % font)
在這兩種情況下,所產生的輸出是相同的,並使用黑體(是的,我做的有安裝兩種字體)。
只是可以肯定,下面並沒有幫助:
matplotlib.rc('font', family = 'Gill Sans')
最後,如果我更換後端,而是採用了原生瀏覽器:
matplotlib.use('MacOSX')
我做 GET顯示正確的字體 - 但只在查看器GUI中顯示。 PDF輸出再次出錯。
可以肯定 - 我可以集的字體 - 但只有其他類的字體家庭:我可以設置serif
字體或fantasy
或monospace
。但是所有的無襯線字體似乎默認爲Helvetica。
你說,「」家庭「的參數[是]不是要指定字體的名稱」 - 抱歉,但[文檔](http://matplotlib.sourceforge.net/api/font_manager_api.html# matplotlib.font_manager.FontProperties)用不同的方式表示:「項目**可能**包含通用字體系列名稱[...]。 **在這種情況下**,將使用實際使用的字體......「(強調我的)。此外,*它在GUI中起作用。無論如何,我會嘗試你提出的解決方案。謝謝。 – 2010-05-09 14:18:00
通過使用'fname = ...',在調用'savefig'時,在'embedTTFType3'中得到了backend_pdf.py行776中的RuntimeError「TrueType字體缺失表」。我不在TTF和PDF中,但是我*已經通過其他路線在PDF中嵌入了Gill Sans,所以我不確定這裏有什麼不妥。 – 2010-05-09 15:08:37
你是正確的使用真正的字體名稱作爲家庭參數。錯誤消息聽起來像一個錯誤。請在Sourceforge跟蹤器中提交它,提及確切的字體,matplotlib版本和完整的回溯。 – 2010-05-09 17:43:00