Fonctions de tracé de données 2D et statistiques de Matplotlib
Documentation de référence de Matplotlib
Fonctions pour afficher des données 2D et visualiser des distributions statistiques.
Aperçu des fonctions
| Fonction | Description |
|---|---|
| hist2d() | Histogramme 2D |
| hexbin() | Diagramme de regroupement hexagonal (Hexbin) |
| stairs() | Histogramme en escalier (alternative au mode step de hist) |
| matshow() | Afficher une matrice dans une nouvelle Figure |
| pcolor() | Tracé de pseudocouleur (PolyCollection) |
| pcolormesh() | Tracé de pseudocouleur (QuadMesh, meilleures performances) |
| spy() | Motif des éléments non nuls d'une matrice creuse |
| figimage() | Placer une image au niveau de la Figure |
| ecdf() | Fonction de répartition empirique |
| violinplot() | Diagramme en violon |
hist2d() - Histogramme 2D
matplotlib.pyplot.hist2d(x, y, bins=10, range=None, density=False,
weights=None, cmin=None, cmax=None, *, **kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
x = np.random.randn(5000)
y = x * 0.5 + np.random.randn(5000) * 0.5
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# Histogramme 2D
h, xedges, yedges, im = ax1.hist2d(x, y, bins=40, cmap='Blues')
fig.colorbar(im, ax=ax1, label='Count')
ax1.set_title('hist2d()')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
# Binning hexagonal
hb = ax2.hexbin(x, y, gridsize=30, cmap='YlOrRd')
fig.colorbar(hb, ax=ax2, label='Count')
ax2.set_title('hexbin()')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
plt.show()
import numpy as np
np.random.seed(42)
x = np.random.randn(5000)
y = x * 0.5 + np.random.randn(5000) * 0.5
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# Histogramme 2D
h, xedges, yedges, im = ax1.hist2d(x, y, bins=40, cmap='Blues')
fig.colorbar(im, ax=ax1, label='Count')
ax1.set_title('hist2d()')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
# Binning hexagonal
hb = ax2.hexbin(x, y, gridsize=30, cmap='YlOrRd')
fig.colorbar(hb, ax=ax2, label='Count')
ax2.set_title('hexbin()')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
plt.show()
stairs() - Histogramme en escalier
matplotlib.pyplot.stairs(values, edges=None, *, orientation='vertical',
baseline=0, fill=False, **kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
data = np.random.randn(500)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
layout='constrained')
# comparaison hist + stairs
counts, bins = np.histogram(data, bins=30)
ax1.hist(data, bins=30, alpha=0.3, color='steelblue')
ax1.stairs(counts, bins, fill=False, color='red',
linewidth=2, label='contour d'escalier')
ax1.set_title('contour de stairs() sur hist()')
ax1.legend()
# stairs avec fill=True
ax2.stairs(counts, bins, fill=True, color='coral',
alpha=0.7, edgecolor='black', linewidth=1)
ax2.set_title('stairs() avec fill=True')
plt.show()
import numpy as np
np.random.seed(42)
data = np.random.randn(500)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
layout='constrained')
# comparaison hist + stairs
counts, bins = np.histogram(data, bins=30)
ax1.hist(data, bins=30, alpha=0.3, color='steelblue')
ax1.stairs(counts, bins, fill=False, color='red',
linewidth=2, label='contour d'escalier')
ax1.set_title('contour de stairs() sur hist()')
ax1.legend()
# stairs avec fill=True
ax2.stairs(counts, bins, fill=True, color='coral',
alpha=0.7, edgecolor='black', linewidth=1)
ax2.set_title('stairs() avec fill=True')
plt.show()
pcolormesh() - Tracé de pseudocouleur
matplotlib.pyplot.pcolormesh(*args, alpha=None, norm=None,
cmap=None, vmin=None, vmax=None, shading=None, **kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
# Créer des données 2D
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# pcolormesh - shading='flat' par défaut (supprime la dernière ligne/colonne)
pc1 = ax1.pcolormesh(X, Y, Z, cmap='RdYlBu',
shading='auto')
fig.colorbar(pc1, ax=ax1, label='Valeur')
ax1.set_title('pcolormesh()')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
# pcolor - rendu comme PolyCollection
pc2 = ax2.pcolor(X, Y, Z, cmap='RdYlBu')
fig.colorbar(pc2, ax=ax2, label='Valeur')
ax2.set_title('pcolor()')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
plt.show()
import numpy as np
# Créer des données 2D
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# pcolormesh - shading='flat' par défaut (supprime la dernière ligne/colonne)
pc1 = ax1.pcolormesh(X, Y, Z, cmap='RdYlBu',
shading='auto')
fig.colorbar(pc1, ax=ax1, label='Valeur')
ax1.set_title('pcolormesh()')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
# pcolor - rendu comme PolyCollection
pc2 = ax2.pcolor(X, Y, Z, cmap='RdYlBu')
fig.colorbar(pc2, ax=ax2, label='Valeur')
ax2.set_title('pcolor()')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
plt.show()
spy() - Motif de matrice creuse
matplotlib.pyplot.spy(Z, precision=0, marker=None, markersize=None,
aspect='equal', origin='upper', **kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
from scipy import sparse
# Créer une matrice creuse
np.random.seed(42)
dense = np.random.rand(50, 50)
dense[dense < 0.9] = 0 # 90% sont nuls
sparse_mat = sparse.csr_matrix(dense)
fig, ax = plt.subplots(figsize=(5, 5), layout='constrained')
ax.spy(sparse_mat, markersize=5, color='steelblue')
ax.set_title('spy() - Motif de matrice creuse')
plt.show()
import numpy as np
from scipy import sparse
# Créer une matrice creuse
np.random.seed(42)
dense = np.random.rand(50, 50)
dense[dense < 0.9] = 0 # 90% sont nuls
sparse_mat = sparse.csr_matrix(dense)
fig, ax = plt.subplots(figsize=(5, 5), layout='constrained')
ax.spy(sparse_mat, markersize=5, color='steelblue')
ax.set_title('spy() - Motif de matrice creuse')
plt.show()
matshow() / figimage()
matplotlib.pyplot.matshow(A, fignum=None, **kwargs)
matplotlib.pyplot.figimage(X, xo=0, yo=0, alpha=None, norm=None,
cmap=None, vmin=None, vmax=None, origin=None, **kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
# matshow - crée automatiquement une nouvelle Figure pour afficher la matrice
matrix = np.random.rand(8, 8)
plt.matshow(matrix, cmap='viridis')
plt.title('matshow()')
plt.colorbar(label='Valeur')
plt.show()
print("exemple : matshow affiché")
import numpy as np
# matshow - crée automatiquement une nouvelle Figure pour afficher la matrice
matrix = np.random.rand(8, 8)
plt.matshow(matrix, cmap='viridis')
plt.title('matshow()')
plt.colorbar(label='Valeur')
plt.show()
print("exemple : matshow affiché")
ecdf() - Distribution cumulative empirique
matplotlib.pyplot.ecdf(x, *, ax=None, complementary=False,
**kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
data1 = np.random.normal(0, 1, 200)
data2 = np.random.normal(2, 0.5, 200)
fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')
ax.ecdf(data1, label='N(0, 1)')
ax.ecdf(data2, label='N(2, 0.5)')
ax.set_title('ecdf() - CDF empirique')
ax.set_xlabel('Valeur')
ax.set_ylabel('Probabilité cumulative')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()
import numpy as np
np.random.seed(42)
data1 = np.random.normal(0, 1, 200)
data2 = np.random.normal(2, 0.5, 200)
fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')
ax.ecdf(data1, label='N(0, 1)')
ax.ecdf(data2, label='N(2, 0.5)')
ax.set_title('ecdf() - CDF empirique')
ax.set_xlabel('Valeur')
ax.set_ylabel('Probabilité cumulative')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()
violinplot() - Diagramme en violon
matplotlib.pyplot.violinplot(dataset, positions=None, vert=True,
widths=0.5, showmeans=False, showmedians=False,
showextrema=True, **kwargs)
Exemple
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
data = [
np.random.normal(0, 1, 200),
np.random.normal(2, 1.5, 200),
np.random.gamma(2, 1, 200),
]
fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')
vp = ax.violinplot(data, showmeans=True, showmedians=True)
# Couleurs personnalisées
colors = ['#3498db', '#e74c3c', '#2E7DCC']
for body, color in zip(vp['bodies'], colors):
body.set_facecolor(color)
body.set_alpha(0.7)
ax.set_title('violinplot()')
ax.set_xticks([1, 2, 3])
ax.set_xticklabels(['Normal', 'Normal(wide)', 'Gamma'])
ax.grid(axis='y', alpha=0.3)
plt.show()
import numpy as np
np.random.seed(42)
data = [
np.random.normal(0, 1, 200),
np.random.normal(2, 1.5, 200),
np.random.gamma(2, 1, 200),
]
fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')
vp = ax.violinplot(data, showmeans=True, showmedians=True)
# Couleurs personnalisées
colors = ['#3498db', '#e74c3c', '#2E7DCC']
for body, color in zip(vp['bodies'], colors):
body.set_facecolor(color)
body.set_alpha(0.7)
ax.set_title('violinplot()')
ax.set_xticks([1, 2, 3])
ax.set_xticklabels(['Normal', 'Normal(wide)', 'Gamma'])
ax.grid(axis='y', alpha=0.3)
plt.show()
Autres extensions