Every now and then I need to share plots I created in Python with non-Python users. So far, I've been using PNGs exported from Matplotlib (static), or HTMLs created with Plotly (interactive) to this end.
However, now I'd like to add some dropdown menus to my interactive plot. As an example, say I have data stored in a nested dict, like
data = {'country1': {'city1': {'month': [<some list>], 'temperature': [<some list>]},
'city2': {'month': [<some list>], 'temperature': [<some list>]}},
'country2': {'city3': {'month': [<some list>], 'temperature': [<some list>]},
'city4': {'month': [<some list>], 'temperature': [<some list>]},
'city5': {'month': [<some list>], 'temperature': [<some list>]}}}
What I'd like to do is to plot 'temperature' as a function of 'month', based on the values selected in two dropdown menus:
As far as I understood, dropdown menus can be created using Plotly, but to create a dynamic dropdown list like my second one, it looks like I need Dash in addition to Plotly.
My problem is that, to share an app created with Dash with a non-Python user, the app needs to reside somewhere online (e.g. free: Heroku, PythonAnywhere.com, paid: Dash Enterprise). As I often work with confidential data, I'd rather not store this data online.
So now my question is: are there other packages in Python that can do what I want, without the need to store things online?
An online search left me rather overwhelmed; the possibilities seem to be numerous (see e.g. this link). Would Bokeh be an option for me? What would you recommend?
You can download plotly graphs to an offline html file. Anyone you send that file to can open the graph in a browser and interact with it.