Bokeh - Servidor
A arquitetura Bokeh tem um design desacoplado no qual objetos como gráficos e glifos são criados usando Python e convertidos em JSON para serem consumidos por BokehJS client library.
No entanto, é possível manter os objetos em python e no navegador em sincronia um com o outro com a ajuda de Bokeh Server. Ele permite a resposta a eventos de interface do usuário (UI) gerados em um navegador com todo o poder do python. Também ajuda a enviar atualizações do lado do servidor automaticamente para os widgets ou gráficos em um navegador.
Um servidor Bokeh usa o código do aplicativo escrito em Python para criar documentos Bokeh. Cada nova conexão de um navegador cliente resulta no servidor Bokeh criando um novo documento, apenas para aquela sessão.
Primeiro, temos que desenvolver um código de aplicativo para ser servido ao navegador do cliente. O código a seguir renderiza um glifo de linha de onda senoidal. Junto com o gráfico, um controle deslizante também é renderizado para controlar a frequência da onda senoidal. A função de retorno de chamadaupdate_data() atualizações ColumnDataSource dados tomando o valor instantâneo do controle deslizante como frequência atual.
import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import row, column
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Slider, TextInput
from bokeh.plotting import figure
N = 200
x = np.linspace(0, 4*np.pi, N)
y = np.sin(x)
source = ColumnDataSource(data = dict(x = x, y = y))
plot = figure(plot_height = 400, plot_width = 400, title = "sine wave")
plot.line('x', 'y', source = source, line_width = 3, line_alpha = 0.6)
freq = Slider(title = "frequency", value = 1.0, start = 0.1, end = 5.1, step = 0.1)
def update_data(attrname, old, new):
a = 1
b = 0
w = 0
k = freq.value
x = np.linspace(0, 4*np.pi, N)
y = a*np.sin(k*x + w) + b
source.data = dict(x = x, y = y)
freq.on_change('value', update_data)
curdoc().add_root(row(freq, plot, width = 500))
curdoc().title = "Sliders"
Em seguida, inicie o servidor Bokeh seguindo a linha de comando -
Bokeh serve –show sliders.py
O servidor Bokeh começa a rodar e servir o aplicativo em localhost: 5006 / sliders. O log do console mostra a seguinte tela -
C:\Users\User>bokeh serve --show scripts\sliders.py
2019-09-29 00:21:35,855 Starting Bokeh server version 1.3.4 (running on Tornado 6.0.3)
2019-09-29 00:21:35,875 Bokeh app running at: http://localhost:5006/sliders
2019-09-29 00:21:35,875 Starting Bokeh server with process id: 3776
2019-09-29 00:21:37,330 200 GET /sliders (::1) 699.99ms
2019-09-29 00:21:38,033 101 GET /sliders/ws?bokeh-protocol-version=1.0&bokeh-session-id=VDxLKOzI5Ppl9kDvEMRzZgDVyqnXzvDWsAO21bRCKRZZ (::1) 4.00ms
2019-09-29 00:21:38,045 WebSocket connection opened
2019-09-29 00:21:38,049 ServerConnection created
Abra seu navegador favorito e digite o endereço acima. O gráfico da onda senoidal é exibido da seguinte forma -
Você pode tentar alterar a frequência para 2 rolando o controle deslizante.