En utilisant le mécanisme appelé widget de matplotlib, il est possible de créer un Widget interactif en le plaçant dans Axes sans dépendre du backend GUI.
Ce qui suit est un extrait de la documentation du widget.
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.
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)
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
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
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))
Ensuite, créez des axes sur la figure.
#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)
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)
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)
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()
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