Je cherche un moyen de changer la position de l'IntSlider vertical à la droite de la matplotlib fig. Voici le code:Comment changer la position par défaut d'un curseur ipywidget à côté d'un chiffre matplotlib?
from ipywidgets import interact, fixed, IntSlider
import numpy as np
from matplotlib import pyplot as plt
%matplotlib notebook
fig = plt.figure(figsize=(8,4))
xs = np.random.random_integers(0, 5000, 50)
ys = np.random.random_integers(0, 5000, 50)
ax = fig.add_subplot(111)
scat, = ax.plot(xs, ys, 'kx', markersize=1)
ax.grid(which='both', color='.25', lw=.1)
ax.set_aspect('equal'), ax.set_title('Rotate')
def rotate(theta, xs, ys):
new_xs = xs * np.cos(np.deg2rad(theta)) - ys * np.sin(np.deg2rad(theta))
new_xs -= new_xs.min()
new_ys = xs * np.sin(np.deg2rad(theta)) + ys * np.cos(np.deg2rad(theta))
new_ys -= new_ys.min()
return new_xs, new_ys
def update_plot(theta, xs, ys):
new_xs, new_ys = rotate(theta, xs, ys)
scat.set_xdata(new_xs), scat.set_ydata(new_ys)
ax.set_xlim(new_xs.min() - 500, new_xs.max() + 500)
ax.set_ylim(new_ys.min() - 500, new_ys.max() + 500)
w = interact(update_plot,
theta=IntSlider(min=-180, max=180, step=5,value=0, orientation='vertical'),
xs=fixed(xs),
ys=fixed(ys))
C'est ce que j'ai:
Voici ce que je veux:
Il pourrait y avoir un moyen très simple fais cela, mais je ne peux pas me comprendre.
J'ai essayé de placer à la fois le fig
et le widget interactive
dans un VBox
puis envelopper le VBox
avec IPython.display
et cela n'a pas fonctionné.
Impossible de trouver une solution directe à cela dans les exemples.
EDIT1:
ipywidgets fournit une classe Output()
qui capture la zone de sortie et l'utiliser dans le contexte du widget.
Je vais essayer de comprendre comment l'utiliser.
Tel est l'objet: https://github.com/jupyter-widgets/ipywidgets/blob/master/ipywidgets/widgets/widget_output.py
Avez-vous essayé ma solution ci-dessous? –
Oui, je pense que vous êtes sur la bonne voie. Si vous trouvez un moyen de le faire fonctionner en déballant la construction de la figure et l'axe de la fonction update_plot, je vais accepter votre réponse. Prenez beaucoup à l'objet Output(). Je pense que cela va résoudre notre problème. –