Nous allons voir comment visualiser une fonction de deux variables f(x, y).
Dans cette page, nous présentons deux syntaxes : la syntaxe « PyLab » qui est proche de celle de Matlab et la syntaxe « standard » qui est recommandée dans les nouvelles versions de matplotlib.
Pour plus d’informations sur la différence entre les deux syntaxes, vous pouvez consulter la page Tracé de courbes.
meshgrid()
¶Pour visualiser une fonction z = f(x, y) :
meshgrid()
.meshgrid()
permet de générer un maillage.
>>> import numpy as np
>>> x = np.array([3, 4, 7])
>>> y = np.array([-1, 0])
>>> X, Y = np.meshgrid(x, y)
>>> X
array([[3, 4, 7],
[3, 4, 7]])
>>> Y
array([[-1, -1, -1],
[ 0, 0, 0]])
pcolor()
¶pcolor()
permet une visualisation grâce à des couleurs.
Syntaxe « PyLab »
from pylab import *
x = linspace(-3, 3, 51)
y = linspace(-2, 2, 41)
X, Y = meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
pcolor(X, Y, Z)
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
plt.pcolor(X, Y, Z)
plt.show()
colorbar()
¶Syntaxe « PyLab »
from pylab import *
x = linspace(-3, 3, 51)
y = linspace(-2, 2, 41)
X, Y = meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
pcolor(X, Y, Z)
colorbar()
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
plt.pcolor(X, Y, Z)
plt.colorbar()
plt.show()
>>> help(colormaps)
Syntaxe « PyLab »
from pylab import *
x = linspace(-3, 3, 51)
y = linspace(-2, 2, 41)
X, Y = meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
pcolor(X, Y, Z, cmap=cm.hot)
colorbar()
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
plt.pcolor(X, Y, Z, cmap=plt.cm.hot)
plt.colorbar()
plt.show()
Les autres choix possibles sont : autumn, bone, cool, copper, flag, gray, hot, hsv, jet, pink, prism, spring, summer, winter, spectral.
pcolormesh()
¶Syntaxe « PyLab »
from pylab import *
x = linspace(-3, 3, 51)
y = linspace(-2, 2, 41)
X, Y = meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
pcolormesh(X, Y, Z)
colorbar()
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
plt.pcolormesh(X, Y, Z)
plt.colorbar()
plt.show()
On peut mettre en place un effet de fondu sur les couleurs pour éviter l’aspect quadrillage grâce à l’argument shading="gouraud"
.
Syntaxe « PyLab »
from pylab import *
x = linspace(-3, 3, 51)
y = linspace(-2, 2, 41)
X, Y = meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
pcolormesh(X, Y, Z, shading="gouraud")
colorbar()
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
plt.pcolormesh(X, Y, Z, shading="gouraud")
plt.colorbar()
plt.show()
imshow()
¶Syntaxe « PyLab »
from pylab import *
xmin = -3
xmax = 3
nbx = 51
ymin = -2
ymax = 2
nby = 41
x = linspace(xmin, xmax, nbx)
y = linspace(ymin, ymax, nby)
X, Y = meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
imshow(Z, interpolation="bicubic",
origin="lower", extent=[xmin,xmax,ymin,ymax])
colorbar()
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
xmin = -3
xmax = 3
nbx = 51
ymin = -2
ymax = 2
nby = 41
x = np.linspace(xmin, xmax, nbx)
y = np.linspace(ymin, ymax, nby)
X, Y = np.meshgrid(x, y)
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) # calcul du tableau des valeurs de Z
plt.imshow(Z, interpolation="bicubic",
origin="lower", extent=[xmin,xmax,ymin,ymax])
plt.colorbar()
plt.show()
Nous allons tracer la fonction sinus cardinal (plus précisément ici sin(r)/r). On va utiliser la constante prédéfinie finfo(float).eps pour lever l’indétermination de la division 0/0.
Note
finfo(float).eps est le plus petit flottant positif tel que 1.0 + eps != 1.0. eps = 2**(-52), ce qui donne approximativement 2.22e-16.
Syntaxe « PyLab »
from pylab import *
epsilon = finfo(float).eps
print("epsilon =", epsilon)
xmin = -8
xmax = 8
nbx = 41
ymin = -8
ymax = 8
nby = 41
x = linspace(xmin, xmax, nbx)
y = linspace(ymin, ymax, nby)
X, Y = meshgrid(x, y)
R = sqrt(X**2 + Y**2) + epsilon
Z = sin(R) / R
imshow(Z, interpolation="bicubic",
origin="lower", extent=[xmin,xmax,ymin,ymax])
colorbar()
show()
Syntaxe « standard »
import numpy as np
import matplotlib.pyplot as plt
epsilon = np.finfo(float).eps
print("epsilon =", epsilon)
xmin = -8
xmax = 8
nbx = 41
ymin = -8
ymax = 8
nby = 41
x = np.linspace(xmin, xmax, nbx)
y = np.linspace(ymin, ymax, nby)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2) + epsilon
Z = np.sin(R) / R
plt.imshow(Z, interpolation="bicubic",
origin="lower", extent=[xmin,xmax,ymin,ymax])
plt.colorbar()
plt.show()
Voir aussi