I proudly present plotly-resampler, a wrapper around the plotly Figure object, which is able to visualize large sequences of time-series data.
I wrote a custom dash-component to optimize the callbacks (i.e. only send the to-be updated trace data to the client). I am rather sure that this component & the source code can still be improved!
Any feedback/contributions are welcome!
Convenient to use:
- just add the
FigureResampler decorator around a plotly Figure constructor and call
- allows all other plotly figure construction flexibility to be used!
- can be used in Jupyter, vscode-notebooks, Pycharm-notebooks, as application (on a server)
- Interface for various downsampling algorithms:
- ability to define your preferred sequence aggregation method
This is SO cool! I can’t wait to try it out
This is impressive work Thank you for building this and sharing with the community, @jonvdrdo .
Could this be used with large amount of data that’s not strictly time-series? In my case I have data about frames in a video, so consecutive indices from 0 to a large number
plotly-resampler supports numeric-indices (i.e., not-time based indices (see the noisy-sine on the right-top subplot of the example gif)) so I suppose it will work!
This is really amazing work! I recently inherited an app the integrates Dash into a Flask app and then generates timeseries figures dynamically that could really benefit from something like this. @jonvdrdo I know you have an example of using this with dynamically generated figures, but do you think it could work with dash running on top of a custom Flask app?
Thank you for your kind words, means a lot!
Regarding the Flask app example; I think this should be possible, and it would also benefit others if we would also incorporate this into the
examples folder of the repository.
I would suggest that you create a GitHub issue in which you post a (minimal) working flask example which you would like to have extended with plotly-resampler functionality!
It’s very generous of you to be willing to spend time working on all these examples! I really appreciate it.
The app I inherited is a bit odd compared with other example Flask Dash apps I’ve seen so I’ll try to come up with a minimal example using a more standard approach. Full disclosure I’m very new to the Flask and Dash libraries (and coding in general) so it may take me a bit to get an example ready, but I will do my best.
I’m really new to this community, but its really awesome to see what people like you are doing
Brilliant! Can’t wait to try it out on my project!
This looks really amazing. I tried to give it a go and ran into some stumbling blocks mentioned here [PLOTLY RESAMPLE] What can I do to choose how much plotly resample samples?. This looks like exactly the right solution to my problem because I’m trying to visualize lots and lots of data.
Why do I get this Warning
Could not import lttbc; will use a (slower) python alternative.
Any help will be useful. I am running with this warning and things does not look bad.
Hi @Akshay91 ,
This most likely means that our more efficient C-implementation of the LTTB data aggregation algorithm (i.e., lttbc) was not compiled successfully during installation of plotly-resampler.
(I suggest you take a closer look at the output during (re)installation)
As a result, this
lttbc cannot be used at runtime, and we will fall back to (our somewhat) slower python implementation. So everything will work just fine, but a little slower.
Hope this answers your question.
Thanks for your revert. I did re-install plotly-resampler and found nothing strange in the output. Other than installed successfully.
What should I do next?
I don’t mind the speed until the file size is <200 MB. More than that, I can see lag in interactivity.
what platform are you using, how do you install the package?
Can you compile other c-code on your platform (e.g., do you have gcc installed)?
Can you output the install output when you try to install it via pip? (i.e.
pip install plotly-resampler==0.8.2)
If you can give me this infromation, I might be able to help you!