Seltsame Antwort auf Schriftarteinstellungen in 'matplotlib'

Ich habe eine Vielzahl von Schriften, die auf meinem System installiert sind (OS X 10.9.1), und können sie alle ohne Probleme in allen meinen Werkzeugen und Anwendungen (einschließlich meiner LaTeX-Installation) verwenden, aber meine Versuche, eine bestimmte Schriftart anzugeben matplotlib (mit text.usetex=False ) produzieren unerwartete und verwirrende Ergebnisse.

Beispielsweise

 font = {'family': 'sans-serif', 'sans-serif': ['Open Sans', 'Avenir', 'sans-serif']} plt.rc('font', **font) 

Führt dazu, dass weder Open Sans noch Avenir verwendet werden, obwohl die Angabe einer Größe (zB 'size': 20 ) die Größe wie erwartet verändert.

Seltsamerweise, die Angabe eines Gewichts nicht nur das Gewicht verändert, sondern kann auch dazu führen, dass die Schriftart ändern. Beispielsweise

 font = {'family': 'sans-serif', 'sans-serif': ['Open Sans', 'Avenir', 'sans-serif'], 'weight': 'bold'} plt.rc('font', **font) 

Scheint, dass Open Sans verwendet wird (aber als etwas, das aussieht wie extra-fett anstatt fett). Wenn ich Gewicht 550 oder mehr mache, bekomme ich die gleiche Wirkung; Während irgendwelche weniger Ergebnisse in der falschen Schriftart. Ich bekomme ein ähnliches seltsames Verhalten mit anderen Schriften (zB Sika oder Gill Sans), und sehe dies unabhängig davon, ob die Schriftart OT, TT ist oder ob es als System- oder User-Schriftart angezeigt wird.

Warum ist (nur) matplotlib auf diese seltsame Weise reagiert Gibt es matplotlib (oder Python) Einstellungen oder Konfigurationsoptionen Ich sollte ändern, um sicherzustellen, dass ich das erwartete Verhalten bekomme? Gibt es eine andere Art, wie ich das Schriftgewicht angeben sollte, vielleicht?


FWIW, hier ist, wie Open Sans in meiner Schriftinstallation aussieht:

Bildbeschreibung hier eingeben

Alle diese werden von Python wie erwartet (in /Users/Rax/Library/Fonts/ ) von gefunden

 import matplotlib.font_manager print matplotlib.font_manager.findSystemFonts(fontpaths=None) 

und

 font_manager.FontProperties(fname='/Users/Rax/Library/Fonts/OpenSans-ExtraBold.ttf').get_name() font_manager.FontProperties(fname='/Users/Rax/Library/Fonts/OpenSans-Regular.ttf').get_name() 

Beide melden 'Open Sans' als Schriftartnamen, wie erwartet, mit

 font_manager.FontProperties(fname='/Users/Rax/Library/Fonts/OpenSans-Regular.ttf').get_weight() 

Berichterstattung "normal".

  • Plot numpy datetime64 mit matplotlib
  • .matplotlibrc und Standardoptionen
  • Colormap für errorbars in xy scatter plot mit matplotlib
  • Mpld3 ~ Punkte auswählen und ihre Koordinaten erhalten?
  • Python plot stiel mit datetime base
  • Fügen Sie den Rand hinzu, wenn die Plots gegen den Rand des Graphen laufen
  • Verstecken Sie den Kontur-Strickstempel auf pyplot.contourf, um nur Fills zu bekommen
  • Emacs: Kill laufen python Skript
  • One Solution collect form web for “Seltsame Antwort auf Schriftarteinstellungen in 'matplotlib'”

    Wenn du noch keinen hast, möchtest du vielleicht eine matplotlibrc Datei matplotlibrc und sehen, ob diese Einstellungen matplotlibrc . Setzen Sie es in ~/.matplotlib/matplotlibrc und es wird automatisch beim Start gelesen. Ich habe mich noch nicht für Schriften angeschaut, aber als ich einige andere Einstellungen in ihr geändert habe (Bild DPI, speziell) wurde es abgeholt, als ich IPython mit Pylab neu gestartet habe, also hoffentlich wird es für dich arbeiten.

    Python ist die beste Programmiersprache der Welt.