Tutoriel Matplotlib

Matplotlib est probablement l'un des packages Python les plus utilisés pour la représentation de graphiques en 2D. Il fournit aussi bien un moyen rapide de visualiser des données grâce au langage Python, que des illustrations de grande qualité dans divers formats.

3 commentaires Donner une note  l'article (5)

Article lu   fois.

Les deux auteur et traducteur

Traducteur :

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Présentation

Matplotlib est probablement l'un des packages Python les plus utilisés pour la représentation de graphiques en 2D. Il fournit aussi bien un moyen rapide de visualiser des données grâce au langage Python, que des illustrations de grande qualité dans divers formats.

Nous explorerons matplotlib en console interactive et nous tenterons d'aborder les cas les plus courants.

I-A. IPython et le mode pylab

IPython est une console interactive Python améliorée qui supporte un grand nombre de fonctionnalités très intéressantes parmi lesquelles les entrées/sorties nommées, l'utilisation directe de commandes shell, un système de débogage amélioré et bien plus encore.

En lançant cette console avec l'argument -pylab (--pylab depuis IPython version 0.12), l'on dispose immédiatement d'une session matplotlib interactive avec de nombreuses fonctionnalités du type Matlab™ / Mathematica™.

I-B. Pylab

Pylab fournit une interface procédurale à la librairie graphique matplotlib orientée objet. Elle est basée sur un modèle très proche de Matlab™. De la sorte, la grande majorité des commandes pylab ont leur équivalent Matlab™ avec des arguments similaires. Les commandes les plus importantes sont expliquées avec des exemples en console interactive.

II. Graphique simple

Dans cette rubrique, nous voudrions tracer les fonctions sinus et cosinus sur un seul et même graphique. En partant des paramètres par défaut, nous allons améliorer la représentation étape par étape jusqu'à obtenir quelque chose de correct.

Tout d'abord, récupérons les données des fonctions sinus et cosinus :

 
Sélectionnez
from pylab import *

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

X est désormais un tableau numpy comprenant 256 valeurs allant de -? à +? (inclus). C et S représentent respectivement le cosinus et le sinus de ces valeurs.

Pour tester cet exemple, vous pouvez lancer une console interactive IPython :

 
Sélectionnez
$ ipython --pylab

Vous obtiendrez alors un message de bienvenue ressemblant à ceci :

 
Sélectionnez
IPython 0.13 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

Welcome to pylab, a matplotlib-based Python environment.
For more information, type 'help(pylab)'.

Vous pouvez aussi copier/coller le code source de chaque exemple dans un fichier et le lancer comme un script Python ordinaire, exemple :

 
Sélectionnez
$ python exercice_1.py

Le code source des exercices (exercice_xx.py, …) est dissimulé par défaut. Cliquez sur l'image Image non disponible pour le faire apparaître à chaque étape.

II-A. Paramètres par défaut

Image non disponible
exercice_1.py
Cacher/Afficher le codeSélectionnez

Matplotlib est fournie avec un jeu de paramètres par défaut qui permet de personnaliser toute sorte de propriétés. Vous pouvez contrôler les réglages par défaut de (presque) toutes les propriétés : taille du graphique, résolution en points par pouce (dpi), épaisseur du trait, couleurs, styles, vues, repères, grilles, textes, polices de caractères, etc. Bien que les réglages par défaut répondent à la plupart des cas courants, vous pourriez être amenés à en modifier quelques-uns pour des cas plus spécifiques.

 
Sélectionnez
from pylab import *

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

plot(X,C)
plot(X,S)

show()

II-B. Modifier les réglages par défaut

Documentation

Image non disponible
exercice_2.py
Cacher/Afficher le codeSélectionnez

Dans le script suivant, nous modifions (et commentons) les réglages qui impactent directement l'apparence du graphique.

Ces réglages ont été volontairement redéfinis à leurs valeurs par défaut, mais vous pouvez les faire varier pour voir ce que cela donne (voir les rubriques Propriétés de lignePropriétés de trait et Styles de traitStyles de trait plus bas, rubrique Références).

 
Sélectionnez
# on importe tout de matplotlib
# numpy est accessible via l'alias 'np'
from pylab import *

# on crée un graphique de 8x6 pouces 
# avec une résolution de 80 points par pouce
figure(figsize=(8,6), dpi=80)

# on crée une nouvelle vue dans une grille de 1 ligne x 1 colonne
subplot(1,1,1)

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

# on trace la fonction cosinus en bleu avec un trait plein de 1 pixel d'épaisseur
plot(X, C, color="blue", linewidth=1.0, linestyle="-")

# on trace la fonction sinus en vert avec un trait plein de 1 pixel d'épaisseur
plot(X, S, color="green", linewidth=1.0, linestyle="-")

# limites de l'axe (O,x) des abscisses
xlim(-4.0,4.0)

# graduations de l'axe (O,x) des abscisses
xticks(np.linspace(-4,4,9,endpoint=True))

# limites de l'axe (O,y) des ordonnées
ylim(-1.0,1.0)

# graduations de l'axe (O,y) des ordonnées
yticks(np.linspace(-1,1,5,endpoint=True))

# on enregistre le graphique avec une résolution de 72 points par pouce
# savefig("exercice_2.png",dpi=72)

# on affiche le résultat à l'écran
show()

II-C. Modifier les couleurs et épaisseurs de trait

Image non disponible
exercice3.py
Cacher/Afficher le codeSélectionnez

Pour commencer, nous voudrions mettre la courbe cosinus en bleu, la courbe sinus en rouge et épaissir un peu le trait des deux courbes. Nous modifierons aussi, très légèrement, la taille du graphique afin que ce dernier paraisse plus horizontal, plus panoramique.

 
Sélectionnez
...
figure(figsize=(10,6), dpi=80)
plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plot(X, S, color="red",  linewidth=2.5, linestyle="-")
...

II-D. Délimiter les axes du repère

Image non disponible
exercice_4.py
Cacher/Afficher le codeSélectionnez

Les limites actuelles sur les axes du repère sont un peu trop serrées, nous voudrions les agrandir afin d'aérer le graphique.

 
Sélectionnez
...
xlim(X.min()*1.1, X.max()*1.1)
ylim(C.min()*1.1, C.max()*1.1)
...

Notez que pour une version plus robuste, nous devrions plutôt écrire :

 
Sélectionnez
xmin ,xmax = X.min(), X.max()
ymin, ymax = Y.min(), Y.max()

dx = (xmax - xmin) * 0.2
dy = (ymax - ymin) * 0.2

xlim(xmin - dx, xmax + dx)
ylim(ymin - dy, ymax + dy)

II-E. Définir les graduations

Image non disponible
exercice_5.py
Cacher/Afficher le codeSélectionnez

Les graduations actuelles ne sont pas idéales : elles n'affichent pas les valeurs (+/-?, +/-?/2) qui nous intéressent pour sinus et cosinus. Modifions-les pour qu'elles correspondent à ces valeurs.

 
Sélectionnez
...
xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
yticks([-1, 0, +1])
...

II-F. Définir le texte des graduations

Image non disponible
exercice_6.py
Cacher/Afficher le codeSélectionnez

Les graduations sont bien placées, mais le contenu de leur texte n'est pas très explicite. Nous pourrions deviner que 3.142 correspond à Pi, mais ce serait beaucoup mieux de l'indiquer clairement. Lorsqu'on définit des valeurs pour les graduations, il est aussi possible de définir des étiquettes de texte correspondant à ces valeurs dans une liste fournie en second argument d'appel de fonction. Nous utiliserons une notation LaTeX pour obtenir un meilleur rendu final.

 
Sélectionnez
...
xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

yticks([-1, 0, +1],
       [r'$-1$', r'$0$', r'$+1$'])
...

II-G. Déplacer les axes du repère

Image non disponible
exercice_7.py
Cacher/Afficher le codeSélectionnez

Les axes du repère sont les droites qui portent les marques de graduation et qui délimitent la zone de représentation du graphique. Ces axes peuvent être placés arbitrairement. Jusqu'à présent, ils étaient sur les bords extérieurs du graphique. Déplaçons-les de telle sorte qu'ils se croisent au centre du graphique. Comme nous avons quatre droites pour le moment, nous en masquerons deux en définissant leur couleur à None et nous déplacerons les deux autres vers le point d'origine de coordonnées (0, 0) dans l'espace de coordonnées nommé 'data'.

 
Sélectionnez
...
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
...

II-H. Ajouter une légende au graphique

Image non disponible
exercice_8.py
Cacher/Afficher le codeSélectionnez

À présent, ajoutons au graphique une légende dans le coin supérieur gauche. Pour ce faire, il suffit d'ajouter l'argument nommé 'label="texte"' à la commande plot(), puis de spécifier l'emplacement de cette légende.

 
Sélectionnez
...
plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red",  linewidth=2.5, linestyle="-", label="sine")

legend(loc='upper left')
...

II-I. Annoter certains points remarquables

Image non disponible
exercice_9.py
Cacher/Afficher le codeSélectionnez

Annotons quelques points remarquables avec la commande annotate(). Nous choisirons la valeur x=2?/3 aussi bien pour la courbe sinus que pour la courbe cosinus. Nous placerons tout d'abord une marque sur la courbe (gros point rond), puis nous tracerons une ligne en pointillé pour relier cette marque à l'axe (O,x) des abscisses. Pour finir, nous utiliserons la commande annotate() pour afficher du texte et une flèche d'indication.

 
Sélectionnez
...

t = 2*np.pi/3
plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
scatter([t,],[np.cos(t),], 50, color ='blue')

annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
         xy=(t, np.sin(t)), xycoords='data',
         xytext=(+10, +30), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
scatter([t,],[np.sin(t),], 50, color ='red')

annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
         xy=(t, np.cos(t)), xycoords='data',
         xytext=(-90, -50), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
...

II-J. Le diable se cache toujours dans les détails

Documentation

Image non disponible
exercice_10.py
Cacher/Afficher le codeSélectionnez

Comme vous pouvez le remarquer, les étiquettes des graduations sont un peu difficiles à lire. Nous pourrions les agrandir, puis ajuster leurs propriétés de telle sorte qu'elles s'affichent sur un ruban blanc semi-transparent, cela nous permettrait de mieux visualiser aussi bien la courbe que les étiquettes.

 
Sélectionnez
...
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(16)
    label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))
...

III. Graphiques, vues en grille, vues libres et graduations

Jusqu'à présent, nous avons surtout utilisé la création de graphiques et de vues par défaut. Tout cela est bien pratique lorsque l'on souhaite obtenir un résultat rapide, mais nous pourrions avoir un contrôle plus fin sur le résultat en utilisant explicitement les graphiques (matplotlib.figure), les vues en grille (matplotlib.subplot) et les vues libres (matplotlib.axes). Dans matplotlib, un objet figure représente la fenêtre GUI dans son ensemble. À l'intérieur de cette fenêtre, plusieurs types d'affichage peuvent figurer. Alors qu'une vue en grille (subplot) positionne les tracés à l'intérieur d'une grille d'affichage, les vues libres (axes) autorisent un placement plus arbitraire au sein de l'objet figure. Les deux peuvent être très utiles selon l'usage que l'on veut en faire. Nous avons d'ores et déjà travaillé avec des graphiques (figures) et des vues en grille (subplots) sans les mentionner explicitement. Lorsque nous utilisons la commande plot(), matplotlib appelle gca() pour obtenir les vues libres actuelles et gca() appelle à son tour gcf() pour obtenir l'objet figure (graphique) actuel. S'il n'y a pas d'objet figure à ce moment-là, gcf() appelle figure() pour en créer un nouveau ou plus précisément, pour créer un objet figure contenant une vue en grille subplot(1,1,1). Voyons tout cela en détail.

III-A. Graphiques (mathplotlib.figure)

Un objet figure (graphique) représente la fenêtre GUI intitulée « Figure #nnn » avec nnn le numéro de la figure. Les fenêtres « figure » sont numérotées à partir de 1 et non pas à partir de zéro (0) comme pour le comptage en Python. Cela est clairement conforme au style Matlab™. Plusieurs arguments nommés déterminent l'apparence d'un objet figure :

Argument

Valeur par défaut

Description

num

1

numéro de l'objet figure

figsize

figure.figsize

taille en pouces (largeur, hauteur)

dpi

figure.dpi

résolution en points par pouce

facecolor

figure.facecolor

couleur d'arrière-plan

edgecolor

figure.edgecolor

couleur de la bordure entourant l'arrière-plan

frameon

True

dessiner le cadre de l'objet figure ou non

Les valeurs par défaut peuvent être spécifiées dans un fichier de ressources. Elles sont utilisées la plupart du temps. Seul le numéro de figure est fréquemment changé.

Lorsque vous travaillez avec la fenêtre GUI, vous pouvez la fermer soit avec le bouton « x » dédié, soit par le code avec la commande close().

Selon le cas :

  1. close() ferme uniquement l'objet figure actif ;
  2. close(num) ferme l'objet figure numéro num ;
  3. close(fig) ferme l'objet figure référencé par fig ;
  4. close('all') ferme tous les objets figure actuellement actifs.

Comme pour tous les autres objets, vous pouvez définir les propriétés d'un objet figure avec les méthodes set_<nom propriété>(value).

III-B. Vues en grille (matplotlib.subplot)

Les vues en grille (subplot) permettent d'organiser les différents tracés à l'intérieur d'une grille d'affichage. Il faut spécifier le nombre de lignes, le nombre de colonnes ainsi que le numéro du tracé. Notez toutefois que la commande gridspec() est une alternative beaucoup plus puissante.

Image non disponible
subplot-horizontal.py
Cacher/Afficher le codeSélectionnez
Image non disponible
subplot-vertical.py
Cacher/Afficher le codeSélectionnez
Image non disponible
subplot-grid.py
Cacher/Afficher le codeSélectionnez
Image non disponible
gridspec.py
Cacher/Afficher le codeSélectionnez

III-C. Vues libres (matplotlib.axes)

Les vues libres (axes) sont très similaires aux vues en grille (subplot) sauf qu'elles permettent un placement libre des tracés partout dans l'objet figure (la fenêtre GUI). Par exemple, pour placer un petit tracé dans un grand tracé, rien de plus simple avec les vues libres.

Image non disponible
axes.py
Cacher/Afficher le codeSélectionnez
Image non disponible
axes-2.py
Cacher/Afficher le codeSélectionnez

III-D. Graduations de repère

Une présentation soignée des graduations de repère est une part importante du rendu final d'un graphique prêt à l'impression. Matplotlib fournit un système de graduations entièrement personnalisable. Les localisateurs (tick locators) permettent de préciser l'emplacement des graduations dans le tracé, alors que les formateurs (tick formatters) permettent une mise en forme des graduations selon vos exigences. Les graduations principales et secondaires peuvent être placées ou mises en forme indépendamment les unes des autres. Par défaut, les graduations secondaires ne sont pas affichées, elles correspondent en fait à une liste vide et un NullLocator (voir plus bas).

III-D-1. Localisateurs de graduations (tick locators)

Différentes classes de localisateurs en fonction des besoins :

Classe

Description

NullLocator

Aucune graduation.
Image non disponible

IndexLocator

Affiche une graduation à chaque multiple d'un nombre fixe de points tracés.
IndexLocator

FixedLocator

Les emplacements des graduations sont déterminés arbitrairement.
FixedLocator

LinearLocator

Les emplacements des graduations sont déterminés linéairement à intervalles réguliers et à pas fixe.
LinearLocator

MultipleLocator

Place une graduation à chaque entier multiple d'un nombre de base.
Image non disponible

AutoLocator

Choisit au plus n intervalles et harmonise les emplacements.
Image non disponible

LogLocator

Les emplacements des graduations sont déterminés pour les échelles logarithmiques.
Image non disponible

Tous ces localisateurs dérivent de la classe ancêtre matplotlib.ticker.Locator. Vous pouvez créer votre propre localisateur en dérivant cette même classe ancêtre.

La gestion des dates comme graduations peut s'avérer particulièrement épineuse. Toutefois, matplotlib fournit quelques localisateurs spéciaux dans le module matplotlib.dates.

IV. Autres types de tracés

IV-A. Tracés simples

Indice

Vous aurez besoin de la commande fill_between().

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte des zones remplies) :

 
Sélectionnez
from pylab import *

n = 256
X = np.linspace(-np.pi,np.pi,n,endpoint=True)
Y = np.sin(2*X)

plot (X, Y+1, color='blue', alpha=1.00)
plot (X, Y-1, color='blue', alpha=1.00)
show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

plot_ex.py
Cacher/Afficher le codeSélectionnez

IV-B. Tracés en points

Indice

La couleur est calculée grâce à l'angle de (X,Y).

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte de la taille, de la couleur et de la transparence des points) :

 
Sélectionnez
from pylab import *

n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)

scatter(X,Y)
show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

scatter_ex.py
Cacher/Afficher le codeSélectionnez

IV-C. Histogrammes

Indice

Vous devrez faire attention à l'alignement du texte.

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte qu'il faudra certainement ajouter des étiquettes texte aux barres rouges) :

 
Sélectionnez
from pylab import *

n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)

bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

for x,y in zip(X,Y1):
    text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')

ylim(-1.25,+1.25)
show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

bar_ex.py
Cacher/Afficher le codeSélectionnez

IV-D. Tracés contour

Indice

Vous aurez besoin de la commande clabel().

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte des bandes colorées - voir RéférenceBandes coloréesplus bas) :

 
Sélectionnez
from pylab import *

def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)

contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet')
C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5)
show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

contour_ex.py
Cacher/Afficher le codeSélectionnez

IV-E. Image pixelisée

Indice

Vous devrez faire attention au point d'origine de l'image dans la commande imshow() et utiliser une barre colorée (colorbar).

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte de la bande colorée, de l'interpolation de l'image et du point d'origine) :

 
Sélectionnez
from pylab import *

def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 10
x = np.linspace(-3,3,4*n)
y = np.linspace(-3,3,3*n)
X,Y = np.meshgrid(x,y)
imshow(f(X,Y)), show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

imshow_ex.py
Cacher/Afficher le codeSélectionnez

IV-F. Tracés fléchés

Indice

Vous devrez dessiner les flèches deux fois.

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte des couleurs et des orientations des flèches) :

 
Sélectionnez
from pylab import *

n = 8
X,Y = np.mgrid[0:n,0:n]
quiver(X,Y), show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

quiver_ex.py
Cacher/Afficher le codeSélectionnez

IV-G. Graphiques en camembert

Indice

Vous devrez modifier Z.

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte des couleurs et de la taille des portions) :

 
Sélectionnez
from pylab import *

n = 20
Z = np.random.uniform(0,1,n)
pie(Z), show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

pie_ex.py
Cacher/Afficher le codeSélectionnez

IV-H. Grilles

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite (tenez compte des styles de trait) :

 
Sélectionnez
from pylab import *

axes = gca()
axes.set_xlim(0,4)
axes.set_ylim(0,3)
axes.set_xticklabels([])
axes.set_yticklabels([])

show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

grid_ex.py
Cacher/Afficher le codeSélectionnez

IV-I. Tracés multiples

Indice

Vous pouvez utiliser plusieurs vues avec différents découpages.

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite :

 
Sélectionnez
from pylab import *

subplot(2,2,1)
subplot(2,2,3)
subplot(2,2,4)

show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

multiplot_ex.py
Cacher/Afficher le codeSélectionnez

IV-J. Axes polaires

Indice

Vous aurez uniquement besoin de modifier le tracé des axes.

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite :

 
Sélectionnez
from pylab import *

axes([0,0,1,1])

N = 20
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
bars = bar(theta, radii, width=width, bottom=0.0)

for r,bar in zip(radii, bars):
    bar.set_facecolor( cm.jet(r/10.))
    bar.set_alpha(0.5)

show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

polar_ex.py
Cacher/Afficher le codeSélectionnez

IV-K. Graphiques en 3D

Indice

Vous aurez besoin de la commande contourf().

En vous basant sur le code suivant, essayez d'obtenir le graphique représenté dans l'illustration de droite :

 
Sélectionnez
from pylab import *
from mpl_toolkits.mplot3d import Axes3D

fig = figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot')

show()

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

plot3d_ex.py
Cacher/Afficher le codeSélectionnez

IV-L. Textes

Indice

Jetez un œil au logo matplotlib.

Essayez de faire pareil à partir de zéro !

Image non disponible

Cliquez sur Image non disponible pour voir la réponse.

text_ex.py
Cacher/Afficher le codeSélectionnez

V. Aller plus loin

Matplotlib bénéficie d'une documentation riche et variée, de même que d'une vaste communauté d'utilisateurs et de développeurs. Ci-dessous, quelques liens dignes d'intérêt.

V-A. Tutoriels

  • Tutoriel pyplot

    • Présentation
    • Gérer les propriétés de trait
    • Travailler avec plusieurs objets figure et plusieurs vues
    • Travailler avec du texte
  • Tutoriel image

    • Commandes de départ
    • Importer des données image dans des tableaux numpy
    • Représenter des tableaux numpy comme des images
  • Tutoriel texte

    • Présentation
    • Commandes de texte élémentaires
    • Propriétés de textes et modes d'affichage
    • Écrire des formules mathématiques
    • Rendu de texte avec LaTeX
    • Annoter du texte
  • Tutoriel pour artistes

    • Présentation
    • Personnaliser vos objets
    • Conteneurs d'objets
    • Conteneur graphique (matplotlib.figure)
    • Conteneur de vues libres (matplotlib.axes)
    • Conteneurs d'axes de repère
    • Conteneurs de graduations
  • Tutoriels chemins

    • Présentation
    • Exemple de courbe de Bézier
    • Chemins mélangés
  • Tutoriel transformations

    • Présentation
    • Coordonnées 'data'
    • Coordonnées de vues libres (matplotlib.axes)
    • Transformations de dégradés (gradients)
    • Utiliser les transformations offset pour créer un effet d'ombre projetée
    • Le mécanisme de transformation(pipeline)

V-B. Documentation Matplotlib

V-C. Documentation du code

Le code source de matplotlib est particulièrement bien documenté ; vous pouvez même obtenir une aide rapide sur telle ou telle commande directement dans une console Python :

 
Sélectionnez
>>> from pylab import *
>>> help(plot)
Help on function plot in module matplotlib.pyplot:

plot(*args, **kwargs)
   Plot lines and/or markers to the
   :class:`~matplotlib.axes.Axes`.  *args* is a variable length
   argument, allowing for multiple *x*, *y* pairs with an
   optional format string.  For example, each of the following is
   legal::

       plot(x, y)         # plot x and y using default line style and color
       plot(x, y, 'bo')   # plot x and y using blue circle markers
       plot(y)            # plot y using x as index array 0..N-1
       plot(y, 'r+')      # ditto, but with red plusses

   If *x* and/or *y* is 2-dimensional, then the corresponding columns
   will be plotted.
   ...

V-D. Galeries

La galerie matplotlib est incroyablement utile lorsque l'on cherche un exemple pour un type de graphique en particulier. Chaque exemple est accompagné de son code source.

Il existe une autre galerie plus modeste à cet endroit.

V-E. Mailing lists

Pour finir, vous disposez d'une mailing list utilisateurs où vous pourrez demander de l'aide et une mailing list développeurs pour les questions plus techniques.

VI. Références

Ci-dessous quelques tableaux illustrant les principaux styles et propriétés de trait.

VI-A. Propriétés de trait

Propriété

Description

Apparence

alpha (ou a)

Transparence alpha (ratio compris entre 0 et 1)

Image non disponible

antialiased

Rendu anti-crénelage (booléen)

Image non disponible Image non disponible

color (ou c)

Couleur matplotlib

Image non disponible

linestyle (ou ls)

cf. Styles de traitStyles de trait

 

linewidth (ou lw)

Épaisseur du trait en points (float)

Image non disponible

solid_capstyle

Style de fin de trait pour traits pleins

Image non disponible

solid_joinstyle

Style de jointure pour traits pleins

Image non disponible

dash_capstyle

Style de fin de trait pour pointillés

Image non disponible

dash_joinstyle

Style de jointure pour pointillés

Image non disponible

marker

cf. MarquesMarques

 

markeredgewidth (mew)

Épaisseur du contour d'une marque

Image non disponible

markeredgecolor (mec)

Couleur du contour d'une marque

Image non disponible

markerfacecolor (mfc)

Couleur d'une marque

Image non disponible

markersize (ms)

Taille de la marque en points

Image non disponible

VI-B. Styles de trait

Symbole

Description

Apparence

-

Trait plein

Image non disponible

--

Pointillé long

Image non disponible

-.

Pointillé mixte

Image non disponible

:

Pointillé court

Image non disponible

.

Gros points

Image non disponible

,

Pixels

Image non disponible

o

Cercles

Image non disponible

^

Triangles vers le haut

Image non disponible

v

Triangles vers le bas

Image non disponible

<

Triangles vers la gauche

Image non disponible

>

Triangles vers la droite

Image non disponible

s

Carrés

Image non disponible

+

Signes 'plus' (+)

Image non disponible

x

Signes 'croix' (x)

Image non disponible

D

Diamants carrés (<>)

Image non disponible

d

Losanges

Image non disponible

1

Tripodes vers le bas

Image non disponible

2

Tripodes vers le haut

Image non disponible

3

Tripodes vers la gauche

Image non disponible

4

Tripodes vers la droite

Image non disponible

h

Hexagones verticaux

Image non disponible

H

Hexagones horizontaux

Image non disponible

p

Pentagones

Image non disponible

|

Traits verticaux

Image non disponible

_

Traits horizontaux

Image non disponible

VI-C. Marques

Symbole

Description

Apparence

0

Graduation à gauche

Image non disponible

1

Graduation à droite

Image non disponible

2

Graduation en haut

Image non disponible

3

Graduation en bas

Image non disponible

4

Lambda à gauche

Image non disponible

5

Lambda à droite

Image non disponible

6

Lambda en haut

Image non disponible

7

Lambda en bas

Image non disponible

o

Cercles

Image non disponible

D

Diamants carrés (<>)

Image non disponible

h

Hexagones verticaux

Image non disponible

H

Hexagones horizontaux

Image non disponible

_

Traits horizontaux

Image non disponible

1

Tripodes vers le bas

Image non disponible

2

Tripodes vers le haut

Image non disponible

3

Tripodes vers la gauche

Image non disponible

4

Tripodes vers la droite

Image non disponible

8

Octogones

Image non disponible

p

Pentagones

Image non disponible

^

Triangles vers le haut

Image non disponible

v

Triangles vers le bas

Image non disponible

<

Triangles vers la gauche

Image non disponible

>

Triangles vers la droite

Image non disponible

d

Losanges

Image non disponible

,

Pixels

Image non disponible

+

Signes 'plus' (+)

Image non disponible

.

Gros points

Image non disponible

s

Carrés

Image non disponible

*

Étoiles à cinq branches

Image non disponible

|

Traits verticaux

Image non disponible

x

Signes 'croix' (x)

Image non disponible

r'$\sqrt{2}$'

Toute expression LaTeX

Image non disponible

VI-D. Bandes colorées

Toutes les bandes colorées peuvent être inversées en ajoutant _r en fin de nom. Par exemple, gray_r sera l'inverse de gray.

Veuillez consulter documenter les bandes colorées matplotlib pour plus d'information.

VI-D-1. De base

Nom

Apparence

autumn

Image non disponible

bone

Image non disponible

cool

Image non disponible

copper

Image non disponible

flag

Image non disponible

gray

Image non disponible

hot

Image non disponible

hsv

Image non disponible

jet

Image non disponible

pink

Image non disponible

prism

Image non disponible

spectral

Image non disponible

spring

Image non disponible

summer

Image non disponible

winter

Image non disponible

VI-D-2. GIST

Nom

Apparence

gist_earth

Image non disponible

gist_gray

Image non disponible

gist_heat

Image non disponible

gist_ncar

Image non disponible

gist_rainbow

Image non disponible

gist_stern

Image non disponible

gist_yarg

Image non disponible

VI-D-3. Séquences

Nom

Apparence

BrBG

Image non disponible

PiYG

Image non disponible

PRGn

Image non disponible

PuOr

Image non disponible

RdBu

Image non disponible

RdGy

Image non disponible

RdYlBu

Image non disponible

RdYlGn

Image non disponible

Spectral

Image non disponible

VI-D-4. Dégradés

Nom

Apparence

Blues

Image non disponible

BuGn

Image non disponible

BuPu

Image non disponible

GnBu

Image non disponible

Greens

Image non disponible

Greys

Image non disponible

Oranges

Image non disponible

OrRd

Image non disponible

PuBu

Image non disponible

PuBuGn

Image non disponible

PuRd

Image non disponible

Purples

Image non disponible

RdPu

Image non disponible

Reds

Image non disponible

YlGn

Image non disponible

YlGnBu

Image non disponible

YlOrBr

Image non disponible

YlOrRd

Image non disponible

VI-D-5. Qualifiés

Nom

Apparence

Accent

Image non disponible

Dark2

Image non disponible

Paired

Image non disponible

Pastel1

Image non disponible

Pastel2

Image non disponible

Set1

Image non disponible

Set2

Image non disponible

Set3

Image non disponible

VI-D-6. Divers

Nom

Apparence

afmhot

Image non disponible

binary

Image non disponible

brg

Image non disponible

bwr

Image non disponible

coolwarm

Image non disponible

CMRmap

Image non disponible

cubehelix

Image non disponible

gnuplot

Image non disponible

gnuplot2

Image non disponible

ocean

Image non disponible

rainbow

Image non disponible

seismic

Image non disponible

terrain

Image non disponible

VII. Notes et remerciements de l'auteur

Le présent document est basé sur le tutoriel de Mike Müller disponible sur le site scipy lectures.

Les textes originaux sont disponibles ici. Les illustrations se trouvent dans ce répertoire et les scripts dans celui-ci. Le répertoire Github est ici.

Les codes sources et les ressources sont publiés sous licence Creative Commons Paternité 3.0 - licence USA (CC-by) http://creativecommons.org/licenses/by/3.0/us.

Un grand merci à Bill Wing, Christoph Deil et Wojciech Mamrak pour la relecture et les corrections.

Des illustrations de présentation de diverses techniques de représentation graphique scientifique se trouvent à cet endroit.

Il existe désormais un tutoriel numpy d'accompagnement.

VIII. Remerciements Developpez

Nous remercions Nicolas Rougier qui nous a aimablement autorisés à traduire son article Matlab Tutorial.

Nos remerciements à Raphaël SEBAN (tarball69) pour la traduction et à Fabien (f-leb) pour la mise au gabarit.

Merci également à Malick Seck (milkoseck) pour sa relecture orthographique.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Nicolas P. Rougier et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.