Un guide pour créer et utiliser votre propre style Matplotlib
Bien que l’apparence par défaut des tracés créés à l’aide matplotlib
peut sembler un peu terne, j’apprécie vraiment la personnalisation qui vous permet de modifier chaque petit élément de votre intrigue.
Si vous vous trouvez constamment en train de modifier certains des paramètres de base dansmatplotlib
chaque fois que vous créez une nouvelle figure, il peut être utile de générer un fichier de style. En important ce style, vous pouvez garantir la cohérence, tout en conservant la possibilité de remplacer les paramètres comme vous le souhaitez dans les scripts individuels. C’est très bien si, par exemple, vous générez des chiffres pour une publication et que vous voulez qu’ils aient tous la même apparence sans avoir à copier / coller les paramètres à chaque fois.
Vous pouvez trouver un modèle pour un fichier de style sur le matplotlib
Dépôt Github. Comme vous le voyez, il existe un nombre presque infini de paramètres que vous pouvez personnaliser à votre guise! Nous l’utiliserons comme guide pour créer notre propre fichier de style.
Avant de commencer, nous devons créer un tracé vide en utilisant la valeur par défaut matplotlib
paramètres comme base de comparaison:
# Import packages
import matplotlib.pyplot as plt# Create figure
fig = plt.figure()# Add subplot to figure
ax = fig.add_subplot(111)# Show empty plot
plt.show()
Tout d’abord, nous devons créer un fichier appelé your_style.mplstyle
que nous pouvons ensuite éditer avec l’éditeur de texte de votre choix. Je vais développer le thème scientifique de mon premier article, nous allons donc créer un style appelé scientific.mplstyle
. Pour exécuter ce style, nous devons le placer dans notre matplotlib
répertoire de configuration. Un moyen simple de vérifier où cela doit exécuter le code suivant:
import matplotlib as mpl
mpl.get_configdir()
Mon répertoire de configuration, qui est probablement similaire pour la plupart, se trouve en tant que sous-dossier de mon répertoire personnel: ~/.matplotlib/
Nous plaçons notre .mplstyle
fichier dans un sous-répertoire appelé stylelib
. Si ce dossier n’existe pas encore pour vous, vous pouvez le créer et mettre votre scientific.mplstyle
fichier dans ce dossier. Maintenant, lorsque vous souhaitez utiliser votre style, utilisez la ligne suivante dans votre script Python:
plt.style.use('scientific')
Tout d’abord, nous pouvons définir la taille du chiffre, qui est normalement de 6,4 x 4,8 pouces. Nous utiliserons une figure de 4 x 4 pouces par défaut. Maintenant, chaque fois que nous appelons plt.figure()
, notre figurine aura des dimensions de 4 x 4:
# Figure Properties
figure.figsize: 4, 4
Nous pouvons maintenant définir notre police et la taille de police par défaut. J’utiliserai la police «Avenir» et une taille de police de 16.
# Font Properties
font.family: Avenir
font.size: 16
Maintenant que nous avons modifié les propriétés globales des figures, modifions les propriétés des axes / objets du sous-tracé. Tout d’abord, nous voulons changer l’épaisseur des axes, ce que nous faisons en utilisant axes.linewidth
:
# Axes properties
axes.linewidth: 2
Ensuite, je trouve souvent que le remplissage par défaut (espace blanc) entre les étiquettes de graduation et les étiquettes d’axe est trop petit. Nous pouvons insérer notre propre valeur personnalisée de rembourrage avec les éléments suivants:
axes.labelpad: 10
Enfin, nous allons changer les couleurs par défaut qui sont utilisées lors du traçage, ce qui peut être fait en modifiant le cycleur de couleurs. Nous le faisons en créant un cycler()
objet et le passer à la propriété axes.prop_cycle
. J’aime bien les couleurs utilisées dans les parcelles sur FiveThirtyEight, nous l’utiliserons donc comme notre cycleur de couleurs. Je vais insérer les couleurs en utilisant leurs codes HEX:
axes.prop_cycle: cycler(color=['008fd5',
'fc4f30',
'e5ae38',
'6d904f',
'8b8b8b',
'810f7c'])
Inspectons nos progrès jusqu’à présent! Nous utilisons le code suivant:
# Import packages
import matplotlib.pyplot as plt# Use our custom style
plt.style.use('scientific')# Create figure
fig = plt.figure()# Add subplot to figure
ax = fig.add_subplot(111)# Show empty plot
plt.show()
Vous cherchez déjà beaucoup mieux! Nous notons que les graduations ne correspondent pas à certains des changements d’axe que nous avons effectués, ce sera donc notre prochaine étape.
Nous remarquons sur le graphique par défaut que les graduations sont pointées vers l’extérieur et qu’il n’y a pas de graduations sur les axes supérieur ou droit. Pour notre thème scientifique, nous voulons que les tiques pointent toutes vers l’intérieur, et nous voulons des tiques sur tous les axes, ce que nous pouvons faire avec les éléments suivants:
# Tick properties
# x-axis
xtick.top: True
xtick.direction: in# y-axis
ytick.right: True
ytick.direction: in
Maintenant, nous voulons changer les deux propriétés size
et width
. La valeur de width
correspond à la largeur de ligne, nous allons donc définir cette valeur égale à la valeur que nous avons donnée pour axes.linewidth
(2). La valeur de size
est la longueur des ticks – nous allons définir les ticks majeurs pour avoir une taille de 7 et les ticks mineurs pour avoir une taille de 5:
# x-axis
xtick.major.size: 7
xtick.major.width: 2xtick.minor.size: 5
xtick.minor.width: 2# y-axis
ytick.major.size: 7
ytick.major.width: 2ytick.minor.size: 5
ytick.minor.width: 2
Nous avons maintenant la figure suivante – les tiques ont maintenant été corrigées!
Si nous voulons modifier l’un des paramètres par défaut qui sont utilisés lorsque nous appelons plt.plot()
nous pouvons le faire en modifiant les propriétés de lines
. Cela peut être étendu à d’autres fonctions de traçage – par exemple, vous pouvez modifier les propriétés de scatter
pour affecter les paramètres par défaut lors de la création d’un nuage de points. Dans notre cas, je vais seulement changer la largeur par défaut des lignes à 2, à partir de leur valeur par défaut de 1,5:
# Lines properties
lines.linewidth: 2
La légende par défaut dans matplotlib
est semi-transparent et a un cadre avec des coins incurvés appelé FancyBox
. Pour voir cela en action, nous pouvons exécuter le code suivant, avec tous les paramètres par défaut:
# Import packages
import matplotlib.pyplot as plt
import numpy as np# Create figure
fig = plt.figure()# Add subplot to figure
ax = fig.add_subplot(111)# Create some data
x = np.linspace(0, 4*np.pi, 200)
y1 = np.sin(x)
y2 = 1.5*np.sin(x)
y3 = 2*np.sin(x)# Plot data
ax.plot(x, y1, label='A = 1')
ax.plot(x, y2, label='A = 1.5')
ax.plot(x, y3, label='A = 2')# Add legend
ax.legend()# Show plot
plt.show()
Rendons la légende entièrement opaque et supprimons complètement le cadre:
# Legend properties
legend.framealpha: 1
legend.frameon: False
Voyons maintenant à quoi ressemble l’intrigue précédente avec notre nouveau matplotlib
style! Nous utilisons le code suivant:
# Import packages
import matplotlib.pyplot as plt
import numpy as np# Use our custom style
plt.style.use('scientific')# Create figure
fig = plt.figure()# Add subplot to figure
ax = fig.add_subplot(111)# Create some data
x = np.linspace(0, 4*np.pi, 200)
y1 = np.sin(x)
y2 = 1.5*np.sin(x)
y3 = 2*np.sin(x)# Plot data
ax.plot(x, y1, label='A = 1')
ax.plot(x, y2, label='A = 1.5')
ax.plot(x, y3, label='A = 2')# Set axis labels
ax.set_xlabel('x')
ax.set_ylabel('y')# Add legend - loc is a tuple specifying the bottom left corner
ax.legend(loc=(1.02, 0.65))# Save plot
plt.show()
Et cue la réaction dans 3… 2… 1…
Il y a encore quelques ajustements mineurs que nous pourrions apporter, comme ajuster l’échelle des graduations x et y, mais nous avons tellement simplifié la vie en faisant en sorte que nos paramètres de style fassent la plupart du travail pour nous!
Il existe une infinité de possibilités pour ajuster les propriétés afin de définir un style pour votre matplotlib
parcelles. le scientific.mplstyle
fichier de cet article sera disponible à ce Dépôt Github.
Merci pour la lecture! J’apprécie tout commentaire, et vous pouvez me trouver sur Twitter et connectez-vous avec moi sur LinkedIn pour plus de mises à jour et d’articles.