#!/usr/bin/env python # coding: utf-8 # In[1]: from bokeh.io import output_notebook output_notebook() # ### Pure JS # In[2]: import numpy as np from bokeh.layouts import row, widgetbox from bokeh.models import CustomJS, Slider from bokeh.plotting import figure, output_file, show, ColumnDataSource x = np.linspace(0, 10, 500) y = np.sin(x) source = ColumnDataSource(data=dict(x=x, y=y)) plot = figure(y_range=(-10, 10), plot_width=400, plot_height=400) plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) callback = CustomJS(args=dict(source=source), code=""" var data = source.data; var A = amp.value; var k = freq.value; var phi = phase.value; var B = offset.value; x = data['x'] y = data['y'] for (i = 0; i < x.length; i++) { y[i] = B + A*Math.sin(k*x[i]+phi); } source.trigger('change'); """) amp_slider = Slider(start=0.1, end=10, value=1, step=.1, title="Amplitude", callback=callback) callback.args["amp"] = amp_slider freq_slider = Slider(start=0.1, end=10, value=1, step=.1, title="Frequency", callback=callback) callback.args["freq"] = freq_slider phase_slider = Slider(start=0, end=6.4, value=0, step=.1, title="Phase", callback=callback) callback.args["phase"] = phase_slider offset_slider = Slider(start=-5, end=5, value=0, step=.1, title="Offset", callback=callback) callback.args["offset"] = offset_slider layout = row( plot, widgetbox(amp_slider, freq_slider, phase_slider, offset_slider), ) show(layout) # ### Python Callback # In[3]: from ipywidgets import interact import numpy as np from bokeh.io import push_notebook, show, output_notebook from bokeh.plotting import figure # In[4]: x = np.linspace(0, 2*np.pi, 2000) y = np.sin(x) # In[5]: p = figure(title="simple line example", plot_height=300, plot_width=600, y_range=(-5,5)) r = p.line(x, y, color="#2222aa", line_width=3) # In[6]: def update(f): if f == "sin": func = np.sin elif f == "cos": func = np.cos elif f == "tan": func = np.tan r.data_source.data['y'] = 1 * func(x) push_notebook() # In[7]: show(p, notebook_handle=True) # In[8]: interact(update, f=['sin', 'cos'], )