14 June 2020

Юпитер и интерактивность - кнопка с графиком

Рассмотрим теперь возможность строить графики и для этого добавим вычисление данных.
Я сознательно сделаю сами данные как глобальные и добавлю функцию для их вычисления

# глобальные x и y
x, y  = [], []

# вычисляем их в отдельной функции с двумя параметрами
def calc(f, phase):
    global x,y
    x = np.linspace(0, 10, 100)
    y = np.sin(f * x + phase)

   
Для рисования создадим отдельную функцию, которая будет использовать глобальные данные

# функция рисования с двумя параметрами
# перед рисованием она вызывает функцию calc для обновления данных
def plot_f(f, phase):
    global x,y
    calc(f, phase)
   
    # само рисование
    plt.plot(x, y, 'r')
    plt.show()

   
Сообразно нам надо поменять и обработчик нажатия кнопки   

outt = widgets.Output()

def on_butt_clicked(b):
    with outt:
        clear_output()
        global sF,sPhase
        print ('Clicked')
        print(sF.value, sPhase.value)
       
        # вызываем рисование
        plot_f(sF.value, sPhase.value)
       
button.on_click(on_butt_clicked)
widgets.VBox([sF, sPhase, button ])

Запускаем пример и делаем вывод outt - все работает как надо и в outt как раз наш график, которые перерисовывается при нажатии кнопки.


Обычно, описывая интерактивность Юпитера, блоггеры далее подобных примеров не идут, и, как можно видеть, все работает.
Однако если мы хотим рисовать что-то посложнее, то все становится не так просто, но об этом отдельно.

No comments:

Post a Comment