我们正在尝试构建一个 Web 应用程序——仪表板——在 DJango 上使用 Bokeh + Holoviews + Datashader 显示不同的交互(包括点击回调、获取新数据等)图表。
由于数据非常大并且可能有 10+ 百万个点,我们正在使用数据着色器。我们可以从 Bokeh + Holoviews + Datashader 从后端获得一个来自后端的静态 html,并使用 Django REST api 将其传递给前端:
视图.py
import numpy as np
import holoviews as hv
import datashader as ds
from dask import dataframe as dd
from bokeh.io import show, curdoc
from bokeh.layouts import layout
from bokeh.models import Slider, Button
from holoviews.operation.datashader import datashade
renderer = hv.renderer('bokeh').instance(mode='server')
def home(request):
def plot_info(y_col):
from vaex import dataframe as datafm
df_dask = dd.read_parquet(r"C:\Dropbox\1mln.parquet", engine='pyarrow',
columns=['nest11', 'nest21', 'first_element', 'second_element', 'timestamp'])
df_dask['timestamp'] = dd.to_datetime(df_dask.timestamp, unit='ns')
return hv.Curve((df_dask['timestamp'], df_dask[y_col]))
def bearer():
stream = hv.streams.Stream.define('y-axis', y_col="nest11")()
dmap = hv.DynamicMap(plot_info, streams=[stream])
vmap = datashade(dmap).opts(width=1200, height=600, responsive=True)
html = renderer.static_html(vmap)
return html
context = {
'seq_num': bearer(),
}
return render(request, 'home/welcome.html', context)
工作正常。但是,由于我们使用了 Datashader,因此当我们放大时,数据会在静态 html 中聚合和转换,我们不会从端侧获得我们正在寻找的数据。为此,我的猜测是我们需要 Bokeh 服务器。
我的疑问是:(因为大型数据集必须使用 Datashader)
- 我如何将 Bokeh 服务器与 Django REST api 一起使用?另外我想在前端有一个自定义的 html 页面,所以我使用 Django 模板。
- 使用 Bokeh + Datashader 是否可以替代 Django 进行 REST apis 开发?
- Bokeh 是否支持 REST API?如何 ?请分享一些 REST API 和回调的例子?例如,我有一个仪表板,当我单击一个图表时,我应该获取有关该图表的更多详细信息并在仪表板中播放这些图表?下拉等