Ich möchte qualitativ hochwertige Diagramme für eine Präsentation erstellen. Ich verwende Pythons Matplotlib, um die Grafiken zu generieren. Leider scheint der PDF-Export meine Schrifteinstellungen zu ignorieren.Matplotlib PDF-Export verwendet falsche Schriftart
Ich habe versucht, die Schriftart sowohl durch die Übergabe eines Objekts FontProperties
an die Textzeichnungsfunktionen und durch die globale Einstellung der Option. Für die Aufzeichnung hier ein MWE ist, das Problem zu reproduzieren:
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 beiden Fällen ist die erzeugte Ausgabe ist identisch und verwendet Helvetica (und ja, ich beide Schriften installiert tun haben).
Nur um sicherzugehen, wird die folgende nicht helfen, entweder:
matplotlib.rc('font', family = 'Gill Sans')
Schließlich, wenn ich das Backend ersetzen, anstatt die native Viewer:
matplotlib.use('MacOSX')
I Bekomme die richtige Schriftart angezeigt - aber nur in der Viewer-GUI. Die PDF-Ausgabe ist wieder falsch.
Um sicher zu sein - ich kann gesetzt andere Schriftarten - aber nur andere Klassen von Schriftfamilien: Ich serif
Schriftarten oder fantasy
oder monospace
einstellen. Aber alle Sans-Serif-Fonts scheinen auf Helvetica zurückzugreifen.
Sie sagte: „Die‚Familie‘Argument [ist] nicht den Namen der Schriftart angeben gemeint“ - sorry, aber [die Dokumentation] (http://matplotlib.sourceforge.net/api/font_manager_api.html# matplotlib.font_manager.FontProperties) sagt anders: "Die Items ** können ** einen generischen Font-Familiennamen enthalten [...]. ** In diesem Fall ** wird die zu verwendende Schriftart nachgeschlagen ... "(Hervorhebung von mir). Außerdem * funktioniert es * in der GUI. Wie auch immer, ich werde Ihre vorgeschlagenen Lösungen versuchen. Vielen Dank. –
Mit 'fname = ...' bekomme ich in Zeile 776 von backend_pdf.py in 'embedTTFType3' einen RuntimeError" TrueType-Font fehlt Tabelle "beim Aufruf von' savefig'. Ich bin nicht zu Hause mit TTF und PDF, aber ich habe Gill Sans bereits in PDFs über andere Routen eingebettet, so dass ich mir nicht sicher bin, was hier falsch ist. –
Sie haben Recht, echte Schriftnamen als Familienargumente zu verwenden. Die Fehlermeldung klingt wie ein Fehler. Bitte füge es beim Sourceforge-Tracker ein und erwähne die genaue Schriftart, die matplotlib-Version und das vollständige Traceback. –