Я не могу заставить Jupyterlab сделать графики взаимодействующими с виджетами - PullRequest
0 голосов
/ 10 мая 2019

У меня есть несколько графиков, с которыми я хочу взаимодействовать через виджеты в Jupyterlab. Я установил расширение виджетов, как описано в этом руководстве .

Анаконда показывает мне, что ipywidgets и widgetsnbextension установлены в моей среде.

Чтобы освоить процедуру, я следовал учебному пособию. При выполнении кода я получаю сообщение об ошибке

«Ошибка JavaScript: IPython не определен».

Я попытался изменить магическую команду на% matplotlib inline, это создает пустой график, который не показывает никакой кривой.

import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt
import numpy as np

%matplotlib nbagg

x=np.linspace(0,2,1000)
fig, ax=plt.subplots(1,figsize=(10,4))
plt.suptitle('Sine Wave')

def update_plot(amp, phase, freq):
    '''
    this function linked to the sliders and 
    it replots the sine waves when the sliders are changed
    '''
    ax.clear()
    y = amp * np.sin(freq * 2 * np.pi * x + phase * 2 * np.pi)
    ax.plot(x,y)
    plt.show()


amp=widgets.FloatSlider(min=1,max=10,value=4,description='Amp')
phase=widgets.FloatSlider(min=0,max=5,value=0,description='Phase')
freq=widgets.FloatSlider(min=1,max=10,value=1,description='Freq')

widgets.interactive(update_plot, amp=amp, phase=phase, freq=freq)

Это должно дать график синусоиды, которая взаимодействует через ползунки для изменения амплитуды, фазы и частоты.

Я не знаю, что я мог бы попытаться запустить.

1 Ответ

0 голосов
/ 11 мая 2019

Быстрое обновление: я не знаю, что не так с кодом, который я пробовал ранее, но я нашел другой пример, который работает и более минималистично:

from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
import matplotlib.pyplot as plt
%matplotlib inline

import numpy as np

def plot_func(freq):
    x = np.linspace(0, 2*np.pi,1000)
    y = np.sin(x * freq)
    plt.plot(x, y)

interact(plot_func, freq = widgets.FloatSlider(value=2.5, min=1, 
max=5.0,step=0.5))

Я сейчас просто воспользуюсь этимПример в качестве шаблона для создания моих собственных кодов.

...