matplotlib

Fiche logiciel validé
  • Création ou MAJ importante : 16/03/11
  • Correction mineure : 16/03/11
  • Rédacteur de la fiche : Romaric David - Département Expertise pour la Recherche, Direction Informatique (Université de Strasbourg)
  • Relecteur(s) : Konrad Hinsen (Centre de Biophysique Moléculaire)
    Thierry Dumont (Institut Camille Jordan)
  • Responsable thématique : Violaine Louvet (Institut Camille Jordan)
Mots-clés

matplotlib : modules python pour réaliser des tracés 2D et 3D

Description
Fonctionnalités générales

Matplotlib (http://matplotlib.sourceforge.net/) est une bibliothèque d'extension de Python destinée aux représentations graphiques en 2D uniquement. Les "plots" ainsi réalisés peuvent être très élégants.
Matplotlib s'appuie sur numpy ( http://www.projet-plume.org/fr/fiche/numpy ) pour la représentation des tableaux et propose dans certains cas une syntaxe proche de Matlab ou d'IDL.
L'intérêt du travail dans l'environnement python/numpy est de réaliser un post-traitement évolué sur les données directement dans le code de visualisation, ce qui peut représenter un plus par rapport à Gnuplot dans lequel les capacités de calcul sur les données sont relativement limitées.

Exemple

En quelques lignes, voyons comment tracer l'histogramme d'un ensemble de valeurs contenues dans un tableau :

from pylab import *
# Definition de la serie de donnees en x : de 0 a 2 par pas de 0.1
t = arange(0.0, 2.0, 0.01)
# Une sinusoide au courant
s = 230 * sin(2*pi*t)
# 1er morceau du graphique, 1ere ligne, 1ere colonne
subplot(2,1,1)
plot(t,s)
title(r'$\Pi =3.14 \   sin(2 \times \omega t)$')
# 2ème morceau de graphique, 1ere colonne, 2ème ligne
subplot(2,1,2)
n,h,p=hist(s)
plot(t)
title(r'Histogramme')
# Export en PDF
savefig('sinus.pdf')
# Affichage
show()

Le code suivant produit un plot 3D (Z=f(x,y)) :

import numpy
import math
import matplotlib
# Choix du back-end graphique
matplotlib.use('TkAgg')

# Création de données synthétiques
def init_data(myarray):
        print "Init_data : shape",myarray.shape
        for i in range( myarray.shape[0]):
                for j in range (myarray.shape[1]):
                                myarray[i,j]=i+100*math.sin(i/(2*3.14))+100*math.sin(j/(2*3.14))
        return myarray

dset_data=init_data(numpy.empty((100,100),dtype=int))

# Create a 3D plot
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig = plt.figure()
ax = axes3d.Axes3D(fig)

# Create regular mesh from coordinates
X,Y=numpy.meshgrid(numpy.arange(0,dset_data.shape[0]),numpy.arange(dset_data.shape[1]))

ax.plot_wireframe(X,Y,dset_data)
plt.show()

Autres fonctionnalités

Interaction avec ipython : interpréteur python amélioré spécialement pensé pour le couplage avec matplotlib (historique des commandes, ...).
Ipython est disponible à l'adresse http://ipython.scipy.org/.

Matplotlib est également intégrée dans Enthought Python Distribution (http://www.enthought.com/products/epd.php)
et à Sage http://www.sagemath.org/()

Interopérabilité

Matplotlib est conçu pour s'interfacer avec numpy, standard de représentation efficace des tableaux en python.

Contexte d'utilisation dans mon laboratoire/service

Dans l'environnement du rédacteur, matplotlib est utilisé par l'Institut de Recherche Mathématique Avancée ( http://www-irma.u-strasbg.fr ) et l'Observatoire Astronomique de Strasbourg ( http://astro.u-strasbg.fr/ ). Matplotlib est également utilisé dans le projet européen Euforia ( http://www.euforia-project.eu/EUFORIA/ ).

Limitations, difficultés, fonctionnalités importantes non couvertes

L'interface graphique de matplotlib s'appuie sur différentes bibliothèques graphiques (Tk, Wx, Gtk). La bibiliothèque graphique utilisée par défaut ne fonctionne pas toujours parfaitement sur les différents OS, il faut donc parfois choisir la bonne API à l'utilisation.

Peut être difficile à compiler, j'encourage à choisir une version intégrée à une distribution plus large, en raison des nombreuses dépendances.

Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

En dehors des OS classiques, il faut noter que matplotlib est intégré aux distributions Python Enthought (http://www.enthought.com/products/epd.php) et Python(x,y) (http://www.pythonxy.com/).

Notez que le toolkit pyQwt (http://pyqwt.sourceforge.net/) reprend l'interface "pylab" de Matplotlib, tout en étant plus efficace.

A noter également que matplotlib est intégré au logiciel SAGE : http://www.projet-plume.org/fiche/sage

Plates-formes

Windows (95/98/NT/2000/XP), système POSIX (Linux/BSD/UNIX-like OSes), OS X, Solaris

Logiciels connexes

matplotlib peut s'utiliser directement dans des scripts python, dans les shell python et ipython.

Autres logiciels aux fonctionnalités équivalentes
Environnement de développement
Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur