(Document en cours de rédaction rev. 2019-12-11)
Ce support de cours a pour vocation de faire une introduction rapide de la librairie matplotlib en couvrant une partie des fonctions essentielles à son utilisation. Il n’a pas pour but d’être exhaustif, ni dans le choix des fonctions, ni dans les paramètres des fonctions documentées.
Certaines méthodes peuvent être appelées depuis l’espace global plt
, tel que plt.plot()
. Cela s’appliquera à la figure et l’Axes courant. Il est possible de faire le même appel de façon plus ciblée ainsi : ax.plot()
. Ainsi le graph sera effectué dans l’espace relatif à l’objet ax
préalablement créé.
Beaucoup d’exemples donnés dans ce support sont issus de la documentation originale, avec ou sans adaptation.
Les informations originales et comlètes peuvent être trouvées en suivant les lien qui accompagnent chaque chapitre.
Pour accéder à la documentation complète de MatPlotLib, vous pouvez vous rendre sur https://matplotlib.org/3.1.1/contents.html
Certains termes sont volontairements conservés en anglais, pour aider le lecteur à faire le lien avec la fonction ou la classe à laquelle il fait référence.
Tout code Python peut être écrit dans un fichier dont l’extension est .py
. Ce fichier peut ensuite être exécuté.
Pour ce cours, nous allons utiliser l’outil JupyterLab que vous pouvez librement télécharger et installer sur votre machine selon cette documentation https://jupyter.org/install.html.
L’EPFL offre également un service centralisé JupyterLab ici : https://noto.epfl.ch/
JupyterLab (qui est une évolution de Jupyter Notebook) nous permet d’écrire et exécuter notre code par portions et d’en voir le résultat (en texte ou en graphique), au fur et à mesure de la rédaction.
Chaque code mentionné dans ce document assume que les 3 lignes suivantes ont été exécutées en premier :
%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt
%matplotlib
est une fonction dite magique de Jupyter (parce qu’elle commence par un %
) et indique à MatPlotLib d’afficher les graphiques “en ligne”. Ceci est en réalité le comportement par défaut, donc nous pourrions nous passer de cette commande.import numpy as np
importe la librairie Numpy ; pour plus d’informations, vous pouvez consulter ce chapitre qui lui est dédié.from matplotlib import pyplot as plt
importe la librairie MatPlotLib.Voici quelques illustrations pour rapidement voir ce qui est réalisable. Plus d’exemples peuvent être vus dans la galerie matlplotlib.
= np.linspace(-np.pi, np.pi, 256, endpoint=True)
X = np.cos(X), np.sin(X)
C, S ='cosinus')
plt.plot(X, C, label='sinus')
plt.plot(X, S, label
'Simple plot')
plt.title(
plt.legend()
plt.show()
=(6, 4))
plt.figure(figsize2, 1, 1)
plt.subplot(
plt.xticks(())
plt.yticks(())0.5, 0.5, 'subplot(2,1,1)', ha='center',
plt.text(='center', size=24, alpha=.5)
va
2, 1, 2)
plt.subplot(
plt.xticks(())
plt.yticks(())0.5, 0.5, 'subplot(2,1,2)', ha='center',
plt.text(='center', size=24, alpha=.5)
va
plt.tight_layout() plt.show()
.1, .1, .8, .8])
plt.axes([
plt.xticks(())
plt.yticks(()).6, .6, 'axes([0.1, 0.1, .8, .8])',
plt.text(='center', va='center',
ha=20, alpha=.5)
size
.2, .2, .3, .3])
plt.axes([
plt.xticks(())
plt.yticks(()).5, .5, 'axes([0.2, 0.2, .3, .3])',
plt.text(='center', va='center',
ha=16, alpha=.5)
size
plt.show()
def tickline():
0, 10)
plt.xlim(-1, 0)
plt.ylim(
plt.yticks([])= plt.gca()
ax 'right'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom')
ax.xaxis.set_ticks_position('bottom'].set_position(('data',0))
ax.spines['none')
ax.yaxis.set_ticks_position(0.1))
ax.xaxis.set_minor_locator(plt.MultipleLocator(11), np.ones(11))
ax.plot(np.arange(return ax
= [
locators 'plt.NullLocator()',
'plt.MultipleLocator(1.0)',
'plt.FixedLocator([0, 2, 8, 9, 10])',
'plt.IndexLocator(3, 1)',
'plt.LinearLocator(5)',
'plt.LogLocator(2, [1.0])',
'plt.AutoLocator()',
]
= len(locators)
n_locators
= (512, 40 * n_locators)
size = 75.0
dpi = (size[0] / dpi, size[1] / dpi)
figsize = plt.figure(figsize=figsize, dpi=dpi)
fig
for i, locator in enumerate(locators):
1, i + 1)
plt.subplot(n_locators, = tickline()
ax eval(locator))
ax.xaxis.set_major_locator(5, 0.3, locator[3:], ha='center')
plt.text(
=.01, top=.99,
plt.subplots_adjust(bottom=.01, right=.99)
left plt.show()
=(8, 6), dpi=80)
plt.figure(figsize= 15
n = np.arange(n)
X = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2
+Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
plt.bar(X,
for x, y in zip(X, Y1):
+ 0.05, '%.2f' % y,
plt.text(x, y ='center', va='bottom')
hafor x, y in zip(X, Y2):
-y - 0.10, '%.2f' % y,
plt.text(x, ='center', va='bottom')
ha
-1.25, +1.25)
plt.ylim(
plt.xticks(())
plt.yticks(()) plt.show()
=(8, 8), dpi=80)
plt.figure(figsize= 1024
n = np.random.random(n) * 2.0 - 1.0
X = np.random.random(n) * 2.0 - 1.0
Y = (X**2 + Y**2)**0.5 < 1.0
T #T = np.arctan2(Y, X)
#plt.axes([0.025, 0.025, 0.95, 0.95])
=75, c=T, alpha=.5)
plt.scatter(X, Y, s
-1.1, 1.1)
plt.xlim(
plt.xticks(())-1.1, 1.1)
plt.ylim(
plt.yticks(())
plt.show()
=(8, 6), dpi=80)
plt.figure(figsize
def f(x, y):
return (1 - x / 2 + x ** 5 + y ** 3) * \
-x ** 2 -y ** 2)
np.exp(
= 256
n = np.linspace(-3, 3, n)
x = np.linspace(-3, 3, n)
y = np.meshgrid(x, y)
X, Y
8, alpha=.75, cmap='jet')
plt.contourf(X, Y, f(X, Y), = plt.contour(X, Y, f(X, Y), 8, colors='black') C
=(12, 8), dpi=50)
plt.figure(figsize
def f(x, y):
return (1 - x / 2 + x ** 5 + y ** 3) * \
-x ** 2 -y ** 2)
np.exp(
= 40, 30
nx, ny = np.linspace(-3, 3, nx)
x = np.linspace(-3, 3, ny)
y = np.meshgrid(x, y)
X, Y = f(X, Y)
Z
0.025, 0.025, 0.95, 0.95])
plt.axes([='nearest',
plt.imshow(Z, interpolation=plt.cm.gist_gray, origin='lower')
cmap=0.92)
plt.colorbar(shrink
plt.xticks(())
plt.yticks(()) plt.show()
=(8, 8), dpi=60)
plt.figure(figsize
= plt.axes([0.025, 0.025, 0.95, 0.95], polar=True)
ax
= 20
N = np.arange(0, 2 * np.pi, 2 * np.pi / N)
theta = 10 * np.random.rand(N)
radii = np.pi / 4 * np.random.rand(N)
width = plt.bar(theta, radii, width=width, bottom=0.0)
bars
for r, bar in zip(radii, bars):
/10.))
bar.set_facecolor(plt.cm.jet(r0.5)
bar.set_alpha(
ax.set_xticklabels([])
ax.set_yticklabels([]) plt.show()
= plt.figure(figsize=(10, 10), dpi=60)
fig = plt.axes()
ax
= 0.3
size = np.array([[60., 32.], [37., 40.], [29., 10.]])
vals
= plt.get_cmap("tab20c")
cmap = cmap(np.arange(3)*4)
outer_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
inner_colors
sum(axis=1), radius=1, colors=outer_colors,
ax.pie(vals.=dict(width=size, edgecolor='w'))
wedgeprops
=1-size, colors=inner_colors,
ax.pie(vals.flatten(), radius=dict(width=size, edgecolor='w'))
wedgeprops
set(aspect="equal", title='Pie plot with `ax.pie`')
ax. plt.show()
from mpl_toolkits.mplot3d import Axes3D
= plt.figure(dpi=80)
fig = Axes3D(fig)
ax = np.arange(-5, 5, 0.25)
X = np.arange(-5, 5, 0.25)
Y = np.meshgrid(X, Y)
X, Y = np.sqrt(X**2 + Y**2)
R = np.sin(R)
Z
=1, cstride=1,
ax.plot_surface(X, Y, Z, rstride=plt.cm.hot)
cmap='z', offset=-2,
ax.contourf(X, Y, Z, zdir=plt.cm.hot)
cmap-2, 2)
ax.set_zlim( plt.show()
Objet de niveau supérieur qui contient tout ce qui peut être graphé.
Surface sur laquelle on peut grapher quelque chose. Il est possible de placer un Axes à n’importe quelle position.
Classe de base pour XAxis
et YAxis
qui sont les deux axes d’un graphique (abscisse et ordonnée).
Moyen de diviser la surface de dessin en sous-graphes. Cela se fait verticalement ou horizontalement ou avec des combinaisons.
Indicateur de position le long d’un Axis.
Manuel Matplotlib : plt.plot()
Manuel Matplotlib : ax.plot()
*, data=None, **kwargs)
plot([x], y, [fmt], **kwargs) plot([x], y, [fmt], [x2], y2, [fmt2], ...,
Trace les lignes de y en fonction de x (ou avec des marqueurs)
x
: array des coordonnées X0..N-1
)y
: array des coordonnées Ylabel
: str chaîne de légende (nécessite que la légende soit ensuite affichée avec plt.legend()
)fmt
: str optionnel décrivant le formattagecolor
: str optionnel décrivant la couleur. Plusieurs formats possibles décrits ici : La chaîne de formatage consiste en un str contenant des informations sur le marqueur, la ligne et la couleur.
= '[marker][line][color]' fmt
marker
. |
point | , |
pixel | o |
cercle | s |
carré |
v |
triangle vers le bas | ^ |
triangle vers le haut | < |
triangle vers la gauche | > |
triangle vers la droite |
1 |
tri vers le bas | 2 |
tri vers le haut | 3 |
tri vers la gauche | 4 |
tri vers la droite |
p |
pentagone | * |
étoile | h |
hexagone 1 | H |
hexagone 2 |
+ |
plus | x |
x | D |
diamant | d |
petit diamond |
| |
barre verticale | _ |
barre horizontale |
line
- |
continue | -- |
traitillé |
-. |
trait-point | : |
pointillé |
color
b |
bleu | g |
vert | r |
rouge | c |
cyan |
m |
magenta | y |
jaune | k |
noir | w |
blanc |
Manuel Matplotlib : plt.show()
show()
Affiche la figure.
Dans le cas d’une exécution avec le noyau ipython
(utilisé par Jupyter), l’exécution rend immédiatement la main pour une nouvelle instruction. Dans le cas contraire (script *.py
), l’exécution est suspendue, tant que la figure est ouverte. Ceci permet à l’utilisateur de travailler avec cette figure, sans que l’exécution ne s’arrête immédiatement.
Manuel Matplotlib : plt.savefig()
=False) savefig(filename, transparent
Sauve la figure dans un fichier image.
filename
: str Nom du fichier dans lequel la figure doit être sauvéetransparent
: boolean (default: False
) Indique si le fond doit être transparentUtile lorsqu’on souhaite sauver une ou des figures sans interaction avec l’utilisateur dans des fichiers image. Les formats supportés peuvent dépendre
Manuel Matplotlib : plt.title()
=None, loc='center', pad=None, **kwargs) plt.title(label, fontdict
Ajoute un titre
label
: strfontdict
: dict optionel, définissant l’apparence du titre
{'fontsize': rcParams['axes.titlesize'],
'fontweight': rcParams['axes.titleweight'],
'verticalalignment': 'baseline',
'horizontalalignment': loc
}
loc
: str optionnel, parmi (‘center’, ‘left’, ‘right’)Il est également possible de définit le titre sur un Axes avec la méthode :
=None, loc='center', pad=None, **kwargs) ax.set_title(label, fontdict
Manuel Matplotlib : ax.set_title()
Manuel Matplotlib : plt.legend()
*args, **kwargs) legend(
Place la légende sur l’axe. Il est conseillé, avant, d’avoir fourni l’argument label='inline label'
pour chaque élément graphé pour lequel nous souhaitons avec une légende. Ainsi l’appel à plt.legend()
peut se faire sans argument.
loc
: str parmi (‘best’, ‘upper right’, ‘upper left’, ‘lower left’, ‘lower right’, ‘right’, ‘center left’, ‘center right’, ‘lower center’, ‘upper center’, ‘center’)Manuel Matplotlib : plt.figure()
figure([num], [figsize], [dpi], [facecolor], [edgecolor], [clear])
Créée une nouvelle figure.
num
: int ou str ou None (default: None
)
num
est le numéro d’une figure déjà active, alors celle-ci est rendue active et la fonction retourne une référence sur celle-ci.num
est un str, alors il définit le titre de la fenêtre contenant cette figure.figsize
: (float, float) ou None (default: None
)dpi
: int ou None (default: None
)facecolor
: color (default: ‘white’)edgecolor
: color (default: ‘white’)clear
: boolean (default: False
)True
, alors la figure est effacée (si elle existe déjà)Retourne l’objet d’instance de la figure.
Manuel Matplotlib : plt.subplot()
=None, polar=False)
subplot(nrows, ncols, index, projection=None, polar=False) subplot(pos, projection
Créée une nouvelle figure.
nrows
: intncols
: int Nombre de colonnesindex
: int Indexe de l’objet Axes sélectioné.1
, de gauche à droite, puis de haut en bas.pos
: intnrows
, ncols
et index
(sachant qu’aucun peut être plus grand que 9
)projection
: str (default: None
-> ‘rectilinear’)polar
: boolean (default: False
)Retourne l’objet Axes du subplot sélectionné
Manuel Matplotlib : fig.subplot()
= fig.subplots(nrows, ncols, sharex=False, sharey=False) [...]
Ajoute un jeu de subplots à la figure courante et retourne les Axes créés pour ceux-ci.
nrows
: intncols
: intsharex
: booleansharey
: booleanRetourne une liste des objets Axes des subplots créés sur la figure
Manuel Matplotlib : plt.text()
Manuel Matplotlib : ax.text()
Manuel Matplotlib : figure.text()
**kwargs) text(x, y, s,
Écrit le texte à l’emplacement définit
x
: inty
: ints
: strfontsize
ou size
: int ou strfontweight
ou weight
: int ou str “poids” du texte0
et 1000
verticalalignment
ou va
: strhorizontalalignment
ou ha
: strrotation
: float ou stralpha
: float0.0
pour transparent, 1.0
pour opaque)Manuel Matplotlib : plt.tight_layout()
Manuel Matplotlib : figure.tight_layout()
=1.08, h_pad=None, w_pad=None, rect=None) tight_layout(pad
Ajuste les espacements entre les subplots
pad
: float (defaut: 1.08
)h_pad
et w_pad
: float (defaut: idem que pad
)Manuel Matplotlib : plt.axes()
=None, polar=False, **kwargs)
axes(rect, projection axes(ax)
Ajoute un Axes à la figure courante et le rend actif.
rect
: 4-tuple float (left, bottom, width, height)projection
: str (default: None
-> ‘rectilinear’)None
, ‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’ et ‘rectilinear’.polar
: boolean (default: False
)ax
: Axesplt.sca(ax)
, définit l’Axes courant à celui fourni par l’objet ax
.Retourne un objet de type Axes ou une sous-classe.
gca()
GCA comme «Get Current Axes»
Retourne l’objet Axes courant. Utile lorsqu’on souhaite agir directement dessus.
Manuel Matplotlib : plt.xticks()
Manuel Matplotlib : plt.yticks()
= plt.xticks() # obtient la position et les labels
locs, labels =None, labels=None, **kwargs) # définit la position et les labels plt.xticks(ticks
Obtient ou définit la position et les labels des ticks sur l’axe X et Y.
ticks
: array likelabels
: array likekwargs
:Retourne un tuple (locs, labels)
locs
: array likelabels
: array likeText
contenant les labelsL’équivalent peut être fait sur un Axes avec :
self, ticks, minor=False)
ax.set_xticks(self, ticks, minor=False)
ax.set_yticks(self, labels, fontdict=None, minor=False, **kwargs)
ax.set_xticklabels(self, labels, fontdict=None, minor=False, **kwargs)
ax.set_yticklabels(
= ax.get_xticks(self, minor=False)
loc = ax.get_yticks(self, minor=False)
loc = ax.get_xticklabels(self, minor=False, which=None)
labels = ax.get_yticklabels(self, minor=False, which=None) labels
Manuel Matplotlib : ax.set_xticks()
Manuel Matplotlib : ax.set_xticklabels()
Manuel Matplotlib : ax.get_xticks()
Manuel Matplotlib : ax.get_xticklabels()
Manuel Matplotlib : fig.autofmt_xdate()
fig.autofmt_xdate()
Lorsque l’axis des X est rempli de dates, les ticks labels se chevauchent facilement. L’appel de cette méthode formate automatiquemnt les ticks de sorte qu’ils soient inclinés à 45° et aient un bon alignement.
Manuel Matplotlib : plt.xlim()
Manuel Matplotlib : plt.ylim()
= plt.xlim()
left, right
plt.xlim(left, right)= plt.ylim()
bottom, top plt.ylim(bottom, top)
Obtient ou définit les limites sur l’Axis X, respectivement Y
left
, right
, bottom
, top
: valeurs limites dans les 4 extrèmesL’équivalent peut être fait sur un Axes avec :
ax.set_xlim(left, right)= ax.get_xlim()
left, right
ax.set_ylim(bottom, top)= ax.get_ylim() bottom, top
Manuel Matplotlib : ax.set_xlim()
Manuel Matplotlib : ax.get_xlim()
Manuel Matplotlib : ax.set_ylim()
Manuel Matplotlib : ax.get_ylim()
Manuel Matplotlib : plt.grid()
Manuel Matplotlib : ax.grid()
=None, which='major', axis='both', **kwargs) grid(b
Active ou désactive la grille, principale ou secondaire sur l’axe désiré.
b
: booleanTrue
-> active ou False
-> désactive la grillewhich
: straxis
: array likekwargs
:Manuel Matplotlib : ax.set_xlabel
Manuel Matplotlib : ax.set_ylabel
Manuel Matplotlib : ax.set_zlabel
self, xlabel, labelpad=None, **kwargs)
ax.set_xlabel(self, ylabel, labelpad=None, **kwargs)
ax.set_ylabel(self, zlabel, labelpad=None, **kwargs) ax.set_zlabel(
Définit le label de l’axe X, Y, respectivement Z.
xlabel
, ylabel
, zlabel
: strkwargs
Manuel Matplotlib : plt.bar()
Manuel Matplotlib : ax.bar()
=0.8, bottom=None, *, align='center', data=None, **kwargs) bar(x, height, width
Trace un graphe composé de barres verticales
x
: séquence de scalaires coordonnées des barresheight
: scalaire ou séquence de scalaires hauteur de chaque barrewidth
: scalaire ou array largeur de chaque barrebottom
: scalaire ou array hauteur de la base de chaque barrealign
: 'center'
ou 'edge'
alignement sur l’axe X centré ou aligné à gauche.width
kwargs
:color
: color ou array de coloredgecolor
: color ou array de colorlinewidth
: scalaire ou array de scalaire largeur en pixels du contourxerr
et yerr
: scalaire ou array erreur en X et Y
Manuel Matplotlib : plt.fill_between()
Manuel Matplotlib : ax.fill_between()
**kwargs) plt.fill_between(x, y1, y2, where,
Color une surface entre y1 et y2 en fonction de x, où where est True
x
: arrayy1
: arrayy2
: arraywhere
: array de boolean Permet de choisir les positions où colorier et où pasfacecolor
: str optionnel décrivant la couleur. Plusieurs formats possibles décrits ici : alpha
: float transparence (0.0
pour transparent, 1.0
pour opaque)Manuel Matplotlib : plt.scatter()
Manuel Matplotlib : ax.scatter()
=None, c=None, marker=None,
scatter(x, y, s=None, norm=None, vmin=None, vmax=None,
cmap=None, linewidths=None, verts=None,
alpha=None, *, plotnonfinite=False,
edgecolors=None, **kwargs) data
Graphe de nuage de points aux coordonnées fixées avec différents marqueurs, tailles et/ou couleurs
x
et y
: array de longueur n
s
: scalaire ou array de longueur n
(optionnel)c
: couleur, séquence ou séquence de couleurs (optionnel)
n
n
nombres correspondants aux couleurs à utiliser fourni par cmap
et norm
marker
: str ou array de str décrivant les marqueurscmap
: carte de couleurs à utiliser. La référence de ces cartes de couleurs peut être consultée alpha
: opacité de chaque point (0
: transparent, 1
: opaque)Manuel Matplotlib : Colormap reference
Chaque élément graphé peut être non-seulement positionné selon des axes (X, Y et Z), mais peut également être enrichit avec une couleur prise dans une table de couleurs indiquant ainsi une information supplémentaire. Ainsi un graph 2-D pourra devenir un graph dit 2-D et demi, un graph 3-D pourra devenir un graph dit 4-D.
Les colormaps à disposition peuvent être consultés en ligne ici : https://matplotlib.org/3.1.1/gallery/color/colormap_reference.html
Manuel Matplotlib : plt.colorbar()
Manuel Matplotlib : fig.colorbar()
**kwargs)
colorbar(**kwargs)
colorbar(mappable, =cax, **kwargs)
colorbar(mappable, cax=ax, **kwargs) colorbar(mappable, ax
Ajoute l’affichage du Colormap à côté du graph.
Manuel Matplotlib : ax.set_aspect()
self, aspect, adjustable=None, anchor=None, share=False)¶ set_aspect(
Définit l’aspect (ratio y/x) de l’Axes
aspect
: str ou num
1
entre les 2 axis x
et y
y
est num x plus haut que x
.Manuel Matplotlib : plt.pcolormesh()
Manuel Matplotlib : ax.pcolormesh()
**kwargs) pcolormesh([X, Y,] C,
Dessine l’image ou les données représentés par l’array 2-D.
X
et Y
: array (optionnels)
les coordonnées des valeurs données par Z
Ils doivent être des 2-D array de même dimension que Z
(typiquement créé par np.meshgrid
), ou chacun des 1-D array avec len(X) == M
et len(Y) == N
par défaut ils valent X = range(M)
et Y = range(N)
M
et N
représentent les lignes et colonnes de l’image
C
: 2-D array de dimension (N, M)
les valeurs qui seront prises du colormap
cmap
: carte de couleurs à utiliser
Manuel Matplotlib : plt.contour()
Manuel Matplotlib : ax.contour()
**kwargs) contour([X, Y,] Z, [levels],
Dessine un graphe de contour.
X
et Y
: array (optionnels)Z
Z
(typiquement créé par np.meshgrid
), ou chacun des 1-D array avec len(X) == M
et len(Y) == N
X = range(M)
et Y = range(N)
Z
: 2-D array de dimension (N, M)levels
: int ou array (optionnel)n
, définit n
intervalles (dessine n+1
lignes de contour). La hauteur de chaque niveau est automatiquement calculée.Manuel Matplotlib : plt.imshow()
Manuel Matplotlib : ax.imshow()
=None, norm=None, aspect=None, interpolation=None,
imshow(X, cmap=None, vmin=None, vmax=None, origin=None, extent=None,
alpha=<deprecated parameter>, filternorm=1, filterrad=4.0,
shape=<deprecated parameter>, resample=None, url=None, *,
imlim=None, **kwargs) data
Dessine l’image ou les données représentés par l’array 2-D.
X
: array ou PIL imageM
et N
représentent les lignes et colonnes de l’imagecmap
: carte de couleurs à utiliserManuel Matplotlib : ax.plot_surface()
self, X, Y, Z, *args,
plot_surface(=None, vmin=None, vmax=None, lightsource=None, **kwargs) norm
Dessine un graph de surface 3-D
X
, Y
, Z
: 2-D arraycmap
: carte de couleurs à utiliser
Samuel Bancal, EPFL, ENAC-IT (2019-2020)