Подключение виджета к сюжету - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь использовать ipywidget play для создания анимации, которая меняется с помощью ползунка. Тем не менее, это только передача начального значения, а не обновление, как мне это исправить?

from matplotlib import pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3
from matplotlib import animation
import mpl_toolkits.mplot3d.art3d as art3d
%config InlineBackend.figure_format = 'svg'
%matplotlib notebook
import ipywidgets as widgets
from ipywidgets import HBox, VBox, interact, interactive, fixed, 
interact_manual
from IPython.display import display

play = widgets.Play(
   interval=10,
   value= 0,
   min=0,
   max=100,
   step=1,
   description="Press play",
   disabled=False
)

slider = widgets.IntSlider()
widgets.jslink((play, 'value'), (slider, 'value'))
widgets.HBox([play, slider])

display(play, slider)

fig = plt.figure()
ax = p3.Axes3D(fig)

x = np.linspace(-1,1,100)     
y = np.linspace(-1,1,100)
ax.plot(x, y, x*y * slider.value, lw = '2')
plt.show()

1 Ответ

0 голосов
/ 29 апреля 2019

Как уже упоминалось в ImportanceOfBeingErnest, вам нужна функция для работы с "взаимодействовать" , чтобы заставить виджеты взаимодействовать с сюжетом

from matplotlib import pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3
from matplotlib import animation
import mpl_toolkits.mplot3d.art3d as art3d
%config InlineBackend.figure_format = 'svg'

import ipywidgets as widgets
interact_manual
from IPython.display import display

play = widgets.Play(
   interval=10,
   value= 0,
   min=0,
   max=100,
   step=1,
   description="Press play",
   disabled=False
)

slider = widgets.IntSlider()
widgets.jslink((play, 'value'), (slider, 'value'))
ui = widgets.HBox([play])

def f(slider):
    fig = plt.figure()
    ax = p3.Axes3D(fig)
    x = np.linspace(-1,1,100)
    y = np.linspace(-1,1,100)
    ax.plot(x, y, x*y * slider, lw = '2')
    plt.show()
    return

display(ui)

interact(f,slider=slider)
...