import numpy as np
import matplotlib.pyplot as plt
# Notre jeu de données aléatoires
x, y = np.random.rand(2, 100) * 4
hist, xedges, yedges = np.histogram2d(x, y, bins=4)
elements = (len(xedges) - 1) * (len(yedges) - 1)
xpos, ypos = np.meshgrid(xedges[:-1]+0, yedges[:-1]+0)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(elements)
dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = hist.flatten()
# Créer un objet Axes3D pour le graphique 3D
plt.figure("Exemple de graphique en barres et en 3D", figsize=(6, 6))
axes = plt.axes(projection="3d")
# On trace le graphique en 3D
axes.bar3d(xpos, ypos, zpos, dx, dy, dz, color="b", zsort="average")
# On affiche la fenêtre (requis si vous êtes hors JupyterLab)
plt.show()
Comme vu dans un tuto précédent, vous pouvez afficher votre graphique avec un backend Qt. Lorsque vous utilisez un backend interactif comme %matplotlib qt
, vous pouvez contrôler le point de vue sur un graphique 3D directement avec la souris. Voici comment procéder :
Pour faire pivoter le graphique 3D : cliquez et faites glisser le graphique avec le bouton gauche de la souris enfoncé. En déplaçant la souris, vous modifiez les angles d'élévation et azimutal de la vue.
Pour effectuer un zoom avant ou arrière : cliquez en gardez enfoncé le bouton droit de la souris et faites glisser le graphique.
Pour déplacer le graphique : cliquez en gardez enfoncé la molette de la souris et faites glisser le graphique.
%matplotlib qt
import numpy as np
import matplotlib.pyplot as plt
# Notre jeu de données aléatoires
x, y = np.random.rand(2, 100) * 4
hist, xedges, yedges = np.histogram2d(x, y, bins=4)
elements = (len(xedges) - 1) * (len(yedges) - 1)
xpos, ypos = np.meshgrid(xedges[:-1]+0, yedges[:-1]+0)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(elements)
dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = hist.flatten()
# Créer un objet Axes3D pour le graphique 3D
plt.figure("Exemple de graphique en barres et en 3D", figsize=(6, 6))
axes = plt.axes(projection="3d")
# On trace le graphique en 3D
axes.bar3d(xpos, ypos, zpos, dx, dy, dz, color="b", zsort="average")
# On affiche la fenêtre (requis si vous êtes hors JupyterLab)
plt.show()
Il est possible de produire un graphique en barre utilisant une colormap.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm # Pour l'utilisation de la colormap (la palette de couleurs).
# Notre jeu de données aléatoires
x, y = np.random.rand(2, 100) * 4
hist, xedges, yedges = np.histogram2d(x, y, bins=4)
elements = (len(xedges) - 1) * (len(yedges) - 1)
xpos, ypos = np.meshgrid(xedges[:-1]+0, yedges[:-1]+0)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(elements)
dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = hist.flatten()
# Normaliser à [0,1]
norm = plt.Normalize(dz.min(), dz.max())
colors = cm.jet(norm(dz))
# Créer un objet Axes3D pour le graphique 3D
plt.figure("Exemple de graphique en barres et en 3D", figsize=(6, 6))
axes = plt.axes(projection="3d")
# On trace le graphique en 3D
axes.bar3d(xpos, ypos, zpos, dx, dy, dz, color=colors, zsort="average")
# On ajoute la colorbar
m = cm.ScalarMappable(cmap=cm.jet, norm=norm)
m.set_array(dz)
plt.colorbar(m, ax=axes, shrink=0.50)
# On affiche la fenêtre (requis si vous êtes hors JupyterLab)
plt.tight_layout()
plt.show()