Voglio generare diagrammi di alta qualità per una presentazione. Sto usando il Matplotlib di Python per generare la grafica. Sfortunatamente, l'esportazione PDF sembra ignorare le mie impostazioni dei caratteri.L'esportazione PDF Matplotlib utilizza font errato
Ho provato a impostare il carattere passando un oggetto FontProperties
alle funzioni di disegno del testo e impostando l'opzione globalmente. Per la cronaca, ecco un MWE per riprodurre il problema:
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)
In entrambi i casi, l'output prodotto è identico e usa Helvetica (e sì, lo faccio avere entrambi i font installati).
Giusto per essere sicuri, quanto segue non aiuta:
matplotlib.rc('font', family = 'Gill Sans')
Infine, se sostituisco il backend, invece di usare il visualizzatore nativo:
matplotlib.use('MacOSX')
ho fare get viene visualizzato il carattere corretto, ma solo nella GUI del visualizzatore. L'output PDF è ancora una volta sbagliato.
A dire il vero - mi posso impostare altri tipi di carattere - ma solo altre classi di famiglie di font: posso impostare serif
font o fantasy
o monospace
. Ma tutti i font sans-serif sembrano predefiniti a Helvetica.
Hai detto, "L'argomento" famiglia "[non] ha lo scopo di specificare il nome del carattere" - scusa ma [la documentazione] (http://matplotlib.sourceforge.net/api/font_manager_api.html# matplotlib.font_manager.FontProperties) dice in modo diverso: "Gli elementi ** possono ** includere un nome di famiglia di carattere generico [...]. ** In tal caso **, il carattere effettivo da utilizzare verrà cercato ... "(sottolineatura mia). Inoltre, * funziona * nella GUI. Ad ogni modo, proverò le tue soluzioni proposte. Grazie. –
Usando 'fname = ...' Ricevo un oggetto RuntimeError "Il carattere TrueType manca tabella" nella riga 776 di backend_pdf.py, in 'embedTTFType3' quando si chiama' savefig'. Non sono a casa con TTF e PDF ma ho * già * incorporato Gill Sans nei PDF tramite altri percorsi, quindi non sono sicuro di cosa non ci sia. –
Hai ragione sull'uso di nomi di font reali come argomenti familiari. Il messaggio di errore sembra un bug. Si prega di archiviarlo sul tracker Sourceforge, menzionando il font esatto, la versione matplotlib e il traceback completo. –