Need help in deciding if bokeh is suitable for my purpose.

Hi,

We have a requirement from end users to have historical graphs on various stats in SGE grid.

We had setup cacti, but recently I realized that cacti/rrdtool is only suitable for data collected in a regular intervals of time, and few stats of our data are not collected in regular intervals.

So, while I am searching for a proper graphing technology with interactive feature, I found bokeh suitable for our purpose.

But, we have few challenges.

As the historical data is very large, it is impossible to go without using bokeh server. I was able to setup server and deploy graphs on apache proxy. I proceeded with the examples in github. Everything works fine. But, I see we need to have one app for one graph.

Here we have two options:

-> We might plot around 20 graphs side by side in a thumbnail kind of look and so each graph can be compared in parallel and if required, should be able to open a particular graph in a new tab or maximize in the same tab while hiding the rest of the graphs. So, for doing this, just one app is enough?

-> Or we can also try combining all the graphs into one and use the hide feature on legend to display graphs of a particular device only on demand (as these graphs are of same type but for different devices). But, is this a feasible solution or will that increase load on client side and as well as server side heavily?

Also I think most of our end users might prefer to use Internet Explorer, is it compatible?

And it seems, whenever a new app needs to be published, apache should have the app details added in proxy and then should be restarted again. How can we flexibly publish more and more graphs without the need for creating a new app or restarting apache. Like just one page, from where we can dynamically call new graphs on demand.

I guess it is possible to implement all these, but how difficult will it be in bokeh. Iam looking for the possibilities and any hints on how to implement.

Sorry if too many questions.

Thanks.

Regards,

Jeevan.

Hi,

Responses inline below.

So, while I am searching for a proper graphing technology with interactive feature, I found bokeh suitable for our purpose.

But, we have few challenges.

As the historical data is very large, it is impossible to go without using bokeh server. I was able to setup server and deploy graphs on apache proxy. I proceeded with the examples in github. Everything works fine. But, I see we need to have one app for one graph.

As an aside, for large data the DataShader project (which integrates with Bokeh) may be useful to consider:

  http://datashader.readthedocs.io/en/latest/

Here we have two options:
-> We might plot around 20 graphs side by side in a thumbnail kind of look and so each graph can be compared in parallel and if required, should be able to open a particular graph in a new tab or maximize in the same tab while hiding the rest of the graphs. So, for doing this, just one app is enough?
-> Or we can also try combining all the graphs into one and use the hide feature on legend to display graphs of a particular device only on demand (as these graphs are of same type but for different devices). But, is this a feasible solution or will that increase load on client side and as well as server side heavily?

It's hard to give absolute advice without details but general rule of thumb is that Bokeh will generally perform better with a few plots that have a lot of data, than a lot of plots that have a little data.

Also I think most of our end users might prefer to use Internet Explorer, is it compatible?

We strive to maintain compatibility with IE11 and newer.

And it seems, whenever a new app needs to be published, apache should have the app details added in proxy and then should be restarted again. How can we flexibly publish more and more graphs without the need for creating a new app or restarting apache. Like just one page, from where we can dynamically call new graphs on demand.

It's possible to pass HTML request parameters to Bokeh apps. Another solution might be to have a single Bokeh app that looks at HTML request parameters, then does different things depending on the values of the parameters. See:

  http://bokeh.pydata.org/en/latest/docs/user_guide/server.html#accessing-the-http-request

For completeness I will mention that automatically publishing and deploying Bokeh apps with access controls is a feature coming to the Anaconda platform (but that is a paid product).

Thanks,

Bryan

···

On Apr 7, 2017, at 03:36, [email protected] wrote:

I guess it is possible to implement all these, but how difficult will it be in bokeh. Iam looking for the possibilities and any hints on how to implement.

Sorry if too many questions.

Thanks.

Regards,
Jeevan.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/543ffb75-aad8-4968-a32f-3a1fdd0ba5ac%40continuum.io.
For more options, visit https://groups.google.com/a/continuum.io/d/optout.

> Here we have two options:
> -> We might plot around 20 graphs side by side in a thumbnail kind of
look and so each graph can be compared in parallel and if required, should
be able to open a particular graph in a new tab or maximize in the same tab
while hiding the rest of the graphs. So, for doing this, just one app is
enough?
> -> Or we can also try combining all the graphs into one and use the hide
feature on legend to display graphs of a particular device only on demand
(as these graphs are of same type but for different devices). But, is this
a feasible solution or will that increase load on client side and as well
as server side heavily?

Datashader works well with HoloViews and Bokeh in cases like this. E.g.
you can easily plot 20 2-million-point curves as interactive, zoomable
Bokeh plots and select between them, because only a tiny fraction of that
data will ever get sent to the browser:

import numpy as np
import holoviews as hv
from holoviews.operation.datashader import datashade
hv.notebook_extension("bokeh")

xs = np.linspace(-4, 4, 2000000)
ys = np.linspace(1, 11, 20)
sine_data = {z: hv.Curve(np.sin(((z/2)**2+1)*xs)) for z in ys}
curves = hv.HoloMap(sine_data, kdims=['z'])
datashade(curves)

<img src=’//bokeh-discourse-uploads.s3.dualstack.us-east-1.amazonaws.com/original/1X/5dd172fdd61c2f66ec7fd76d37853616772eb38b.png’ width=‘1546’ height=‘618’>

···

> On Apr 7, 2017, at 03:36, [email protected] wrote: