Path: blob/main/examples/apps/fastApi_multi_apps/sliders2/sinewave.py
2014 views
import numpy as np1import param23from bokeh.models import ColumnDataSource4from bokeh.plotting import figure567class SineWave(param.Parameterized):8offset = param.Number(default=0.0, bounds=(-5.0, 5.0))9amplitude = param.Number(default=1.0, bounds=(-5.0, 5.0))10phase = param.Number(default=0.0, bounds=(0.0, 2 * np.pi))11frequency = param.Number(default=1.0, bounds=(0.1, 5.1))12N = param.Integer(default=200, bounds=(0, None))13x_range = param.Range(default=(0, 4 * np.pi), bounds=(0, 4 * np.pi))14y_range = param.Range(default=(-2.5, 2.5), bounds=(-10, 10))1516def __init__(self, **params):17super().__init__(**params)18x, y = self.sine()19self.cds = ColumnDataSource(data=dict(x=x, y=y))20self.plot = figure(height=400, width=400,21tools="crosshair, pan, reset, save, wheel_zoom",22x_range=self.x_range, y_range=self.y_range)23self.plot.line('x', 'y', source=self.cds, line_width=3, line_alpha=0.6)2425@param.depends('N', 'frequency', 'amplitude', 'offset', 'phase', 'x_range', 'y_range', watch=True)26def update_plot(self):27x, y = self.sine()28self.cds.data = dict(x=x, y=y)29self.plot.x_range.start, self.plot.x_range.end = self.x_range30self.plot.y_range.start, self.plot.y_range.end = self.y_range3132def sine(self):33x = np.linspace(0, 4 * np.pi, self.N)34y = self.amplitude * np.sin(self.frequency * x + self.phase) + self.offset35return x, y363738