[PYTHON] Créez des graphiques 3D interactifs sur Jupyter Lab à l'aide de matplotlib

1.Tout d'abord

2. Aperçu

Widgets that are designed to work for any of the GUI backends. All of these widgets require you to predefine a matplotlib.axes.Axes instance and pass that as the first arg.

3. Méthode spécifique

Alors, je vais vous expliquer comment créer un graphique comme celui ci-dessus. De plus, j'ai fait ce qui suit sur JupyterLab, mais comme je l'ai expliqué précédemment, matplotlib.widget ne dépend pas de l'interface graphique, donc le même résultat peut être obtenu non seulement sur le notebook Jupyter mais aussi sur Linux, Windows, Mac GUI. Je pense que ce sera. (Je ne l'ai pas essayé sous la main)

(1) Importez la bibliothèque requise

Tout d'abord, importez les bibliothèques requises. Vous devez également définir le backend sur widget.

%matplotlib widget
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.widgets import Slider
import numpy as np

(2) Créer des données à afficher sous forme d'échantillon

Ici, à titre d'exemple, dessinons un graphique de $ z = x ^ 2 + 2y ^ 2 $.

x = y = np.arange(-20, 20, 0.5)
X, Y = np.meshgrid(x, y)
Z = X*X + 2 * Y*Y

(3) Créer une figure

Comme vous le savez, une figure est comme un campus où vous dessinez des graphiques avec matplotlib. C'est une image de mettre des haches sur la figure et de tracer dessus.

#Paramètres de la figure
fig = plt.figure(figsize=(5,5))

(4) Création d'axes

Ensuite, créez des axes sur la figure.

Axes配置.png

#Ajout d'un graphique 3D et d'axes pour le curseur dans la figure
axcolor = 'gold'
gs = fig.add_gridspec(20, 20)
ax1 = fig.add_subplot(gs[:17,:], projection='3d')
ax_slider_z = fig.add_subplot(gs[18,:], facecolor=axcolor)
ax_slider_xy = fig.add_subplot(gs[19,:], facecolor=axcolor)

(5) Paramètres du curseur

Ensuite, créez un objet Slider. Dans le code ci-dessous

Je fais.

#Paramètres du curseur
z0 = 0
xy0 = 0
delta = 10
slider_z = Slider(ax_slider_z, 'z-axis', -180, 180, valinit=z0, valstep=delta)
slider_xy = Slider(ax_slider_xy, 'xy-axis', -180, 180, valinit=xy0, valstep=delta)

(6) Après avoir défini la valeur initiale de l'angle de vue du graphique 3D, affichez le graphique 3D.

Ensuite, définissez les valeurs initiales des angles visibles autour de l'axe z et autour du plan xy du graphique 3D. En modifiant cette valeur, vous pouvez déplacer l'angle de vue du graphique 3D.

#Définir la valeur initiale de la direction de visualisation du graphique 3D
ax1.view_init(elev=z0, azim=xy0)

#Afficher le graphique 3D
ax1.plot_surface(X, Y, Z)

(7) Créer une fonction de rappel qui est appelée lorsque le curseur est déplacé

Ensuite, créez une fonction de rappel qui sera appelée lorsque vous exécutez Slider. Ici, vous pouvez créer un graphique en mouvement en spécifiant l'angle de vue du graphique 3D et en redessinant le graphique.

#Fonction de rappel appelée lorsque le curseur est déplacé
def view_change(val):

    sz = slider_z.val
    sxy = slider_xy.val
    ax1.view_init(elev=sxy, azim=sz)
    fig.canvas.draw_idle()    

(8) Paramètres de la fonction de rappel

Enfin, définissez l'objet Slider sur la fonction de rappel que vous venez de créer.

slider_z.on_changed(view_change)
slider_xy.on_changed(view_change)
plt.show()

Maintenant, vous pouvez facilement créer un graphique qui fonctionne sur JupyterLab! J'ai également mis l'essentiel dans ici, veuillez donc l'utiliser si vous le souhaitez. (Identique à celui expliqué ci-dessus ...)

Recommended Posts

Créez des graphiques 3D interactifs sur Jupyter Lab à l'aide de matplotlib
Remarques sur l'utilisation de matplotlib sur le serveur
Développement Python sur Ubuntu sur AWS EC2 (à l'aide de Jupyter Lab)
Créer des données d'imprimante 3D (fichier STL) à l'aide de CadQuery
Créer un diagramme de dispersion 3D avec SciPy + matplotlib (Python)
Créez une interface graphique sur le terminal à l'aide de curses
Essayez d'utiliser matplotlib
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib