Update: Eine etwas bessere Vorgehensweise finden Sie am Ende der Antwort.
Update Nr. 2: Ich habe herausgefunden, dass sich auch die Schriftarten für Legendentitel ändern.
Update Nr. 3: In Matplotlib 2.0.0 ist ein Fehler aufgetreten , der dazu führt, dass die Tick-Beschriftungen für logarithmische Achsen auf die Standardschrift zurückgesetzt werden. Sollte in 2.0.1 behoben sein, aber ich habe die Problemumgehung in den 2. Teil der Antwort aufgenommen.
Diese Antwort richtet sich an alle, die versuchen, alle Schriftarten zu ändern, einschließlich der Legende, und an alle, die versuchen, für jede Sache unterschiedliche Schriftarten und Größen zu verwenden. Es wird kein RC verwendet (was bei mir nicht zu funktionieren scheint). Es ist ziemlich umständlich, aber ich konnte mich mit keiner anderen Methode persönlich auseinandersetzen. Grundsätzlich kombiniert es Ryggyrs Antwort hier mit anderen Antworten auf SO.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# Set the font dictionaries (for plot title and axis titles)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
'verticalalignment':'bottom'} # Bottom vertical alignment for more space
axis_font = {'fontname':'Arial', 'size':'14'}
# Set the font properties (for use in legend)
font_path = 'C:\Windows\Fonts\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Defines ax variable by creating an empty plot
# Set the tick labels font
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontname('Arial')
label.set_fontsize(13)
x = np.linspace(0, 10)
y = x + np.random.normal(x) # Just simulates some data
plt.plot(x, y, 'b+', label='Data points')
plt.xlabel("x axis", **axis_font)
plt.ylabel("y axis", **axis_font)
plt.title("Misc graph", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Misc text", **title_font)
plt.show()
Der Vorteil dieser Methode besteht darin, dass Sie durch mehrere Schriftwörterbücher verschiedene Schriftarten / Größen / Gewichte / Farben für die verschiedenen Titel auswählen, die Schriftart für die Häkchenbeschriftungen und die Schriftart für die Legende unabhängig voneinander auswählen können.
AKTUALISIEREN:
Ich habe einen etwas anderen, weniger überfüllten Ansatz entwickelt, der Schriftwörterbücher überflüssig macht und jede Schriftart auf Ihrem System zulässt, sogar .otf-Schriftarten. Um separate Schriftarten für jede Sache zu haben, schreiben Sie einfach mehr font_path
und font_prop
ähnliche Variablen.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Workaround for Matplotlib 2.0.0 log axes bug https://github.com/matplotlib/matplotlib/issues/8017 :
matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x
# Set the font properties (can use more variables for more fonts)
font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Defines ax variable by creating an empty plot
# Define the data to be plotted
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Data points')
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontproperties(font_prop)
label.set_fontsize(13) # Size here overrides font_prop
plt.title("Exponentially decaying oscillations", fontproperties=font_prop,
size=16, verticalalignment='bottom') # Size here overrides font_prop
plt.xlabel("Time", fontproperties=font_prop)
plt.ylabel("Amplitude", fontproperties=font_prop)
plt.text(0, 0, "Misc text", fontproperties=font_prop)
lgd = plt.legend(loc='lower right', prop=font_prop) # NB different 'prop' argument for legend
lgd.set_title("Legend", prop=font_prop)
plt.show()
Hoffentlich ist dies eine umfassende Antwort