Customiser matplotlib (faire son matplotlibrc)

Suite à une mésa­ven­ture liée à mat­plot­lib sur le chan IRC #bioin­fo-fr (mésa­ven­ture suite aux fameuses erreurs de dis­play ; si vous vou­lez tout savoir : si on confi­gure mal son mat­plot­lib on peut géné­rer des erreurs qui font qu'on obtient des images vides… voir la par­tie sur le backend plus tard :o), j'ai par­lé de la joie qu'est d'avoir un mat­plot­li­brc et à quel point ça sim­pli­fie la vie.

Et comme ça pour­rait ser­vir à d'autres, voi­ci un petit article pour par­ler de fichiers de confi­gu­ra­tion de mat­plot­lib !

Qu'est-ce qu'un matplotlibrc ?

Il s'agit tout sim­ple­ment d'un fichier de confi­gu­ra­tion pour mat­plot­lib (comme votre

bashrc

 ), qui permet d'éviter de faire joujou avec les paramètres dynamiquement, de les garder au chaud d'un import à l'autre ;)

Vous avouerez que pour les histoires de backend (la source depuis laquelle vous faites appel à matplotlib, plus de détails ici) sur les serveurs sans serveur X (AKA sans interface graphique), et pour avoir un style cohérent d'une figure à l'autre (de sa thèse par exemple) c'est plutôt pratique !

 

Où est-ce que je range mon matplotlibrc ?

Alors c'est très simple, matplotlib va aller chercher un matplotlibrc à 4 endroits différents au moment de son chargement, et ce dans cet ordre :

  1. dans le fichier
    matplotlibrc  dans le dossier courant
  2. dans
    $MATPLOTLIB/matplotlibrc
  3. dans
    .config/matplotlib/matplotlibrc  (ou dans 
    
    .matplotlib/matplotlibrc  si vous n'êtes pas sous GNU/Linux)
  4. dans
    /etc/matplotlibrc  si vous êtes sous GNU/Linux. Attention, ce fichier sera écrasé à chaque fois que vous ré-installerez matplotlib ! Ce n'est donc pas un endroit pérenne pour aller tripatouiller votre configuration de matplotlib.

Comment est-ce que je vois quel fichier de configuration est chargé ?

Il suffit d'exécuter dans votre shell python (ou encore mieux dans iPython3 !) les commandes suivantes :

import matplotlib
matplotlib.matplotlib_fname()

 

Qu'est-ce que je mets dans mon matplotlibrc ?

Pour faire court (oui oui, il m'arrive de faire court ^_^) : toute la configuration de matplotlib que vous souhaitez conserver d'une fois à l'autre.

Je pense notamment au backend que vous utilisez, que ça soit chez vous, sur votre PC portable ou sur le serveur de calcul sans serveur X.

Pour cela, insérez tout simplement :

# The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo
# MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG
# Template.
# You can also deploy your own backend outside of matplotlib by
# referring to the module name (which must be in the PYTHONPATH) as
# 'module://my_backend'.
backend : Agg

Et pour que le backend ait une solution de repli alternatif automatique en cas de conflit :

# if you are running pyplot inside a GUI and your backend choice
# conflicts, we will automatically try to find a compatible one for
# you if backend_fallback is True
backend_fallback: True

Quelques options cools :

interactive  : False
toolbar : toolbar2 # None | toolbar2 ("classic" is deprecated)
timezone : Europe # a pytz timezone string, e.g., US/Central or Europe/Paris

Et là où la magie s'opère…

Oui parce que c'est bien beau toute cette tambouille interne, mais je vous ai promis des figures cohérentes tout au long de votre thèse ! :p

En fait, vous pouvez tout définir dans votre matplotlibrc : de l'aspect des lignes à l'aspect des boxplots, en passant par la fonte et à l'utilisation de LaTeX.

Plutôt que de vous faire une liste longue comme le bras de ce que vous pouvez faire comme customisation, je vous propose d'aller jeter un œil à ce dépôt git ! Vous y trouverez des démos pour plusieurs styles de matplotlibrc : du R-like, du ggplot-like… et comme nous naviguons dans le merveilleux monde des fichiers de configuration, sachez qu'il en existe plein d'autres (certains sont même sourcés dans le dépôt git que j'ai cité).

 

Et voilà, à votre éditeur de texte préféré et faites-vous un matplotlibrc ;)

 

Je remercie m4rsu pour l'idée de cette article, mes chères relectrices Clem_, Gwenaëlle, Estelle, et mon admin adoré Yoann M.



Pour continuer la lecture :


Commentaires

Une réponse à “Customiser matplotlib (faire son matplotlibrc)”

  1. Petite pré­ci­sion utile : en uti­li­sant 'Agg', un 'pyplot​.show()' ne mar­che­ra plus car 'Agg' est un backend non-inter­ac­tif, il ne peut que géné­rer des fichiers.
    Effet de bord à savoir sur­tout que mat­plot­lib n'envoie aucun mes­sage d'erreur 😉

Laisser un commentaire