I am writing a Bokeh app for running simulations and browsing/visualizing the results. It works okay, but has a few pain points. I’d love to be sold on the holoviz ecosystem.
- The plotting becomes slow at 1M+ points
- Not so great support for adding/removing plots
- Lack of error reporting
- Difficulty applying non-standard style/layout
- No good support for a multi-step app
- ColumnDataSource doesn’t allow data processing
Here is the source code: Pyttoresque/main.py at main · NyanCAD/Pyttoresque · GitHub
And here is a demo video: https://twitter.com/pepijndevos/status/1496108136725454853
It seems like Datashader is the place to be for plotting big data, but my requirement is that the plot can be zoomed interactively, and that it supports streaming data. I’ve been told hvPlot supports this, but the docs are a bit sparse on the subject. I think I should be able to use streamz and set rasterize=true on hvPlot?
My current architecture uses a Capnproto simulation server that streams data to the client. This is currently using ColumnDataSource, but that’s more of a visulalisation structure. In the end I will want to implement data processing as well. It’s worth noting that the simulation data has a variable timestep, and requires interpolation for many types of processing. If there are cool things I should be doing with interp1d, streamz, dask, hdfs, spark or what have you that will help me stream, process, and plot large datasets, I’d love to hear it.
As you can see in the video my app has a bunch of tabs, two pages, and a lot of traces that can be selected. It was quite a pain to get this to work on Bokeh. If there are things in Panel that make this type of app easier to write, please share. Looking around the docs a bit, it looks like templates and pipelines could be useful, but they don’t quite seem to combine in the way I need. The modal seems neat for error reporting, but the static sidebar doesn’t seem to combine well with tabs/traces and a pipeline. Maybe I should use a heavily customised template and pipeline layout for this? Or something else I’ve missed.
Last question is, how hard is it to port a Bokeh app to Panel? It looks like Panel is based on Bokeh and inherits much of the same column/row/grid and widgets. Anything particular to pay attention to? Maybe I should have used Panel from the start but the docs really did not get across what it has to offer over plain Bokeh.