Matplotlib - Python pour le calcul scientifique

publicité
Matplotlib
Python pour le calcul scientifique
Pierre Navaro
IRMAR Rennes
ENSAI le 23 mars 2016
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
1/1
Matplotlib
Bibliothèque la plus riche en types de graphiques 2D
Bon rendu graphique
Export immédiat en PNG, PDF, etc.
Documentation riche et nombreux exemples
Forte communauté
Interface ‘pylab’ : reproduit fidèlement la syntaxe MATLAB
Bibliothèque haut niveau : idéale pour le calcul interactif
Peu adapté pour les animations (> 1D).
Interactivité quasi inexistante
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
2/1
Description de Matplotlib
Les possibilités
Courbes 1D
Graphiques 2D scalaire et vecteurs.
Formats : png, eps, pdf, svg...
Insérer des formules LATEX
Les sous espaces
pyplot : tous les graphiques
mlab : imite quelques fonctionalités MATLAB
pylab : module global regroupant mlab, pyplot et numpy
$ipython -pylab
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
3/1
Premier Exemple
In [1]: x = arange(0,2*pi,0.01)
In [2]: plot(x,sin(x))
Out[2]: [<matplotlib.lines.Line2D object at 0x5a33410>]
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
4/1
L’objet figure
Vous pouvez gérer plusieurs figures en même temps.
Chaque figure peut contenir des sous figures.
Chaque sous figure peut contenir des systèmes de coordonnées
différents.
Chaque système de coordonnées peut contenir plusieurs
courbes.
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
5/1
La fonction subplot
import numpy as np
import matplotlib.pyplot as plt
plt.subplots_adjust(hspace=0.4)
t = np.arange(0.01, 20.0, 0.01)
subplot(numRows, numCols, plotNum)
plt.subplot(121)
plt.semilogy(t, np.exp(-t/5.0))
plt.title('semilogy')
plt.grid(True)
plt.subplot(122,axisbg='y')
plt.semilogx(t, np.sin(2*np.pi*t))
plt.title('semilogx')
plt.grid(True)
plt.show()
http://www-irma.u-strasbg.fr/~navaro/matplotlib/subplot.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
6/1
L’objet figure
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.2)
y1 = np.sin(x)
y2 = np.cos(x)
# New figure
fig = plt.figure()
# One subplot in the figure
ax = fig.add_subplot(111)
#Two plots on the single axis
l1, l2 = ax.plot(x, y1, '-', x,y2,'+')
#Legend on the upper left corner
fig.legend((l1, l2),('sin','cos'),'upper left')
# set x axis label to 't'
ax.set_xlabel('t')
# use LaTeX to set y axis label
ax.set_ylabel('$\phi$')
plt .show()
http://www-irma.u-strasbg.fr/~navaro/matplotlib/figure.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
7/1
Une animation
import time
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
def animate():
tstart = time.time()
x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))
# for profiling
# x-array
for i in np.arange(1,200):
line.set_ydata(np.sin(x+i/10.0))
fig.canvas.draw()
print 'FPS:' , 200/(time.time()-tstart)
# update the data
# redraw the canvas
win = fig.canvas.manager.window
fig.canvas.manager.window.after(100, animate)
plt.show()
http://www-irma.u-strasbg.fr/~navaro/matplotlib/anim_line.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
8/1
Le couple (meshgrid - contourf)
from pylab import *
nx,ny= 32,32
x = linspace(0,1,nx)
y = x.copy()
X, Y = meshgrid(x,y)
F = sin(pi*X)*cos(pi*Y)
cs = contourf(X,Y,F)
cb = colorbar(cs)
show()
http://www-irma.u-strasbg.fr/~navaro/matplotlib/contourf.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
9/1
mplot3d
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z,
rstride=1, cstride=1, cmap=cm.jet,
linewidth=0, antialiased=False)
ax.set_zlim3d(-1.01, 1.01)
fig.colorbar(surf)
plt.show()
http://www-irma.u-strasbg.fr/~navaro/matplotlib/mplot3d.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
10 / 1
Comment on utilise matplotlib en pratique
Ne rien apprendre par coeur !
Aller sur http://matplotlib.sourceforge.net/gallery.html
Chercher le type de figure que vous voulez.
Copier le code source
Adapter le.
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
11 / 1
Alternatives
gnuplot
Chaco ( Enthought Tool Suite
http://code.enthought.com/projects/chaco/)
PyQwt : plus performant mais encore confidentiel
(http://pyqwt.sourceforge.net/)
guiqwt : aussi performant que PyQwt et permet une plus grande
interactivité grace à son API haut niveau.
Grace (grace) et pygrace
Mayavi (http://code.enthought.com/projects/mayavi/)
VisIt (http://www.visitusers.org/index.php?title=
VisIt-tutorial-Python-scripting)
Paraview
(http://www.itk.org/Wiki/ParaView/Python_Scripting)
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
12 / 1
Améliorer l’interactivité : Les possibilités
Tkinter : Implémentation Python de Tcl/Tk.
Simplicité (choix limité de widgets)
Disponibilité (intégré à la bibliothèque standard)
Apparence austère
PyQt : Basée sur la bibliothèque C++ Qt
Utilisable depuis Eclipse et les outils Nokia (QtCreator).
Apparence moderne
Copie conforme de la bibliothèque C++
PyGTK : Basée sur la bibliothèque C GTK
Documentation claire et complète, editeur dédié = Glade.
Exploite pleinement les possibilités de Python.
Apparence moderne
Pas suffisamment disponible sous Windows.
wxPython : Basée sur la bibliothèque C++ wxWindows
Apparence moderne
Réputée inférieure aux bibliothèques précédentes.
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
13 / 1
Stratégies de programmation
Prérequis :
Notions de programmation d’interfaces graphiques.
Notions de programmation orientée objet.
Conception via un GUI designer :
QtDesigner pour PyQt, Glade pour PyGTK.
Conception directe : un éditeur de texte et c’est tout !
Exemple avec Qt
import sys
from PyQt4.QtGui import *
app = QApplication(sys.argv)
button = QPushButton("Hello World", None)
button.show()
app.exec_()
http://www-irma.u-strasbg.fr/~navaro/matplotlib/button.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
14 / 1
Exemple de visualisation embarquée avec Qt
http://www-irma.u-strasbg.fr/~navaro/matplotlib/matplotlibwidget.py
Pierre Navaro (IRMAR Rennes)
Matplotlib
ENSAI le 23 mars 2016
15 / 1
Téléchargement