bokeh_app.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from bokeh.io import output_notebook
  2. from bokeh.io import show
  3. from bokeh.layouts import column
  4. from bokeh.models import ColumnDataSource, Slider
  5. from bokeh.plotting import figure
  6. from bokeh.sampledata.sea_surface_temperature import sea_surface_temperature
  7. from pywebio import start_server
  8. from pywebio.output import *
  9. def bkapp(doc):
  10. df = sea_surface_temperature.copy()
  11. source = ColumnDataSource(data=df)
  12. plot = figure(x_axis_type='datetime', y_range=(0, 25),
  13. y_axis_label='Temperature (Celsius)',
  14. title="Sea Surface Temperature at 43.18, -70.43")
  15. plot.line('time', 'temperature', source=source)
  16. def callback(attr, old, new):
  17. if new == 0:
  18. data = df
  19. else:
  20. data = df.rolling('{0}D'.format(new)).mean()
  21. source.data = ColumnDataSource.from_df(data)
  22. slider = Slider(start=0, end=30, value=0, step=1, title="Smoothing by N Days")
  23. slider.on_change('value', callback)
  24. doc.add_root(column([slider, plot], sizing_mode='stretch_width'))
  25. def main():
  26. output_notebook(verbose=False, notebook_type='pywebio')
  27. put_markdown("""# Bokeh Applications in PyWebIO
  28. [Bokeh Applications](https://docs.bokeh.org/en/latest/docs/user_guide/server.html) 支持向图表的添加按钮、输入框等交互组件,并向组件添加Python回调,从而创建可以与Python代码交互的可视化图表。
  29. 在PyWebIO中,你也可以使用 `bokeh.io.show()` 来显示一个Bokeh App,和输出普通图表一样,只需要在会话开始时调用 `bokeh.io.output_notebook(notebook_type='pywebio')` 来设置PyWebIO输出环境。
  30. 以下为一个 Bokeh App demo:
  31. """, lstrip=True)
  32. show(bkapp)
  33. if __name__ == '__main__':
  34. start_server(main, port=8080, debug=True, cdn=False)