Cette réponse s'adresse à toute personne essayant de changer toutes les polices, y compris pour la légende, et à toute personne essayant d'utiliser des polices et tailles différentes pour chaque élément. Il n'utilise pas rc (qui ne semble pas fonctionner pour moi). C'est peut-être un peu fastidieux mais je n'ai pas réussi à maîtriser une autre méthode, personnellement.
J'ai élaboré une approche légèrement différente et moins encombrée que ma réponse d'origine ci-dessous. Cela permet d'utiliser n'importe quelle police sur votre système, même les polices .otf
. Pour avoir des polices distinctes pour chaque élément, il suffit d'écrire plus de variables font_path
et font_prop
.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Solution de contournement pour le bogue des axes logarithmiques de Matplotlib 2.0.0 https://github.com/matplotlib/matplotlib/issues/8017 :
# matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x
# Définir les propriétés de la police (vous pouvez utiliser plus de variables pour plus de polices)
font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Définit la variable ax en créant un tracé vide
# Définir les données à tracer
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Points de données')
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontproperties(font_prop)
label.set_fontsize(13) # La taille ici remplace font_prop
plt.title("Oscillations décroissantes exponentiellement", fontproperties=font_prop,
size=16, verticalalignment='bottom') # La taille ici remplace font_prop
plt.xlabel("Temps", fontproperties=font_prop)
plt.ylabel("Amplitude", fontproperties=font_prop)
plt.text(0, 0, "Texte divers", fontproperties=font_prop)
lgd = plt.legend(loc='lower right', prop=font_prop) # NB différent argument 'prop' pour la légende
lgd.set_title("Légende", prop=font_prop)
plt.show()
Réponse originale
Cela combine essentiellement la réponse de ryggyr ici avec d'autres réponses sur SO.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# Définir les dictionnaires de police (pour le titre du graphique et les titres des axes)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
'verticalalignment':'bottom'} # Alignement vertical en bas pour plus d'espace
axis_font = {'fontname':'Arial', 'size':'14'}
# Définir les propriétés de la police (pour une utilisation dans la légende)
font_path = 'C:\Windows\Fonts\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Définit la variable ax en créant un tracé vide
# Définir la police des étiquettes des ticks
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) # Simule simplement des données
plt.plot(x, y, 'b+', label='Points de données')
plt.xlabel("Axe x", **axis_font)
plt.ylabel("Axe y", **axis_font)
plt.title("Graphique divers", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Texte divers", **title_font)
plt.show()
En ayant plusieurs dictionnaires de polices, vous pouvez choisir différentes polices/tailles/pesanteurs/couleurs pour les divers titres, choisir la police pour les étiquettes des ticks, et choisir la police pour la légende, de manière indépendante.