Aktualisierung: Am Ende der Antwort finden Sie eine etwas bessere Lösung.
Update #2: Ich habe auch herausgefunden, wie man die Schriftart der Legendenüberschriften ändern kann.
Update #3: Es gibt eine Fehler in Matplotlib 2.0.0 die dazu führt, dass die Beschriftungen für logarithmische Achsen auf die Standardschriftart zurückfallen. Dies sollte in Version 2.0.1 behoben sein, aber ich habe den Workaround in den 2. Teil der Antwort aufgenommen.
Diese Antwort ist für alle, die versuchen, alle Schriftarten zu ändern, einschließlich der Legende, und für alle, die versuchen, verschiedene Schriftarten und -größen für jedes Element zu verwenden. Sie verwendet nicht rc (was bei mir nicht zu funktionieren scheint). Es ist etwas umständlich, aber ich persönlich konnte mich mit keiner anderen Methode anfreunden. Es kombiniert im Grunde die Antwort von ryggyr 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 ist, dass Sie mit mehreren Schriftartenverzeichnissen verschiedene Schriftarten/Größen/Gewichte/Farben für die verschiedenen Titel, die Schriftart für die Häkchenbeschriftungen und die Schriftart für die Legende unabhängig voneinander auswählen können.
UPDATE:
Ich habe einen etwas anderen, weniger unübersichtlichen Ansatz ausgearbeitet, der ohne Schriftarten-Wörterbücher auskommt 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
y font_prop
wie 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