Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

Une courbe d'iso-intensité avec matplotlib

25 Avril 2010 , Rédigé par Roger Bunivot Publié dans #source

La librairie Matplotlib de python permet de tracer toutes sorte de figures. Je vais essayer de présenter ici un exemple de "contour plot" ou courbe iso intensité. Ces courbes permettent de représenter en 2 dimensions, trois informations, x, y, z. On trouve ces représentation dans les cartes ign, alors x et y représentent des distances, z une altitude.  On les utilise aussi en résonnance magnétique nucléaire, alors x,y représentent des fréquences, et z l'intensité du signal.

 


En partant de l'exemple du site de matplotlib, je vais ensuite ajouter diverses options:

 

#!/usr/bin/env python 
"""   ici des commentaires
qui peuvent   à l'occasion s'étaler
sur plusieurs   lignes   """  
import matplotlib #importation du module matplolib
import numpy as np #importation de numpy pratique pour le calcul scientifique
import matplotlib.cm as cm #
import matplotlib.mlab as mlab #
import matplotlib.pyplot as plt #
from matplotlib.widgets import Slider, Button, RadioButtons, Cursor #importation des boutons

#création des données
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
#création de la figure
# on va donner un nom à la figure
fig = plt.figure()
# on défini une zone de traçage
ax = fig.add_subplot(111)
# on trace ici les données
CS = ax.contour(X, Y, Z)
# pour afficher la figure
plt.show()
# un truc que j'aime bien une croix que se promène sur le graphique:
cursor = Cursor(ax, useblit=True, color='red', linewidth=1 )
#On va faire un peu de place pour mettre les différents boutons, curseurs de la figure
fig.subplots_adjust(left=0.25, bottom=0.35)
#création de l'emplacement pour les curseurs
# un curseur pour le nombre de contour
ax_ct= plt.axes([0.25, 0.2, 0.65, 0.03])
# un curseur pour definir le maximum tracé
ax_max = plt.axes([0.25, 0.15, 0.65, 0.03])
# un curseur pour definir l'écart entre les contours
ax_factor = plt.axes([0.25, 0.1, 0.65, 0.03])
#création des curseurs
sct = Slider(ax_ct, 'nb contours', 1, 20, valinit=6)
sct_factor = Slider(ax_factor, 'factor', 1, 10, valinit = 2)
sct_max = Slider(ax_max, 'max', 0,1 , valinit = 0.9)
#création de l'emplacement pour les boutons:
resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
button_ax = plt.axes([0.5, 0.025, 0.1, 0.04])
#création des boutons:
# un bouton de réinitialisation
button = Button(resetax, 'Reset')
# un bouton pour définir la hauteur des contours
button_2 = Button(button_ax, 'set levels')
#création pour l'emplacement des puces
rax = plt.axes([0.025, 0.70, 0.15, 0.15])
rax2 = plt.axes([0.025, 0.5, 0.15, 0.15])
#Les puces:
radio = RadioButtons(rax, ('no', 'extract', 'phase'), active=0)
wich_fig = RadioButtons(rax2, ('1', '2', '3'), active = 0)  

Si tout c'est bien passé vous devriez avoir obtenu la figure aux couleurs près:

 

image.pngIl ne reste plus qu'à associer des actions à ces différents boutons voir les chapitres suivant.

 

 

 

 





Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article