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