-
Notifications
You must be signed in to change notification settings - Fork 658
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature Request: support animation/live updating of OHLCV data plots. #25
Comments
I am planning the ability to pass existing Axes into Ideally, if you could point me to, or send to me, a working version of your existing animated plot code, along with some data to test it, that would help very much for me to better understand "live plotting," as well as your specific use-case; then perhaps we can come up with a way to integrate live plotting into |
Thank you for the reply. I will look at my code and try to extract that portion to show. Since it is part of a bigger project and class I will have to make sure nothing breaks in the example. Should I post it right here? |
You can post it here, but perhaps it's easier to create a gist or public repo (that can be cloned) under your github account and post a link here to it. Thanks. |
Here is a jupyter notebook that I made. I was trying to use the threading
library to simulate a stream of market data coming but it seems it was not
successful. The final graph is just one bar and the program seems to stop.
https://github.com/andresberejnoi/PublicNotebooks/blob/master/public_gist_live_plotter.ipynb
The parts of interest are the Plotter class which does the live plotting
with the plot() method at the end. Datastream class is a container that can
be updated with new ticks and read by Plotter. The code was made to
originally work with tick data streaming from a broker. It is probably very
inefficient since I am turning lists into Dataframes on every refresh of
the chart.
in the script I am generating fake data in the form of timestamps
(datetime objects) and a list of bid and ask prices based loosely on the
price of EUR/USD for forex.
When using with proper data streaming, it used to work and actually plot
new candles as they were formed.
…On Wed, Feb 5, 2020 at 1:46 PM Daniel Goldfarb ***@***.***> wrote:
You can post it here, but perhaps it's easier to create a gist or public
repo (that can be cloned) under your github account and post a link here to
it. Thanks.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#25?email_source=notifications&email_token=AED77INQKNHT7DS6RFIVNBDRBL3NXA5CNFSM4KP4SER2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEK4KXTI#issuecomment-582527949>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AED77IKPZJJROCF7KCXIWS3RBL3NXANCNFSM4KP4SERQ>
.
|
@andresberejnoi -- |
Thank you. It would be a very useful feature. I will also keep looking into it when I get the time. |
I've modified the title because I think the main idea here is to support live updating of the plot, not necessarily via passing in the Figure (although that may be one possible solution). Please let me know if this is correct. |
Yes. I believe it would still be useful to have the ability to pass a
figure to use in other situations, but my main intent with this was to get
live plotting to work.
…On Wed, Feb 12, 2020, 1:47 PM Daniel Goldfarb ***@***.***> wrote:
I've modified the title because I think the main idea here is to support
live updating of the plot, not necessarily via passing in the Figure
(although that may be one possible solution). Please let me know if this is
correct.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#25?email_source=notifications&email_token=AED77IKBJZMCNVYPBOL46QTRCQYZZA5CNFSM4KP4SER2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOELRW5RQ#issuecomment-585330374>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AED77ILMMVDSTJ3A2NV3BDLRCQYZZANCNFSM4KP4SERQ>
.
|
If desired, can you please describe, in some detail, one or two use-cases for passing in the Figure. The problem is this: I am experimenting with a possible enhancement to allow you to pass in Axes (not Figure), and mplfinance will plot on those Axes, thus allowing the user to configure any number of SubPlot.Axes within a Figure, and plot on them ... however if you pass in Figure, mplfinance doesn't know what to do with it! Does it create the Axes it needs, using the Figure passed in (as it does now for it's own internal Figure)? If so, how much of the Figure should it take up with those Axes? Part of it? All of it? Or does it query the Figure passed in to find out if there are already Axes on it? If so, which of those Axes should it use? |
It seems that passing axes is better. To be honest, I am very inexperienced with matplotlib so I thought figures are usually passed around. |
Ok. Noted. Yes, the matplotlib standard is to pass axes. Thanks. |
Is this live now? I also want this live plotting. thanks. |
Me, too. Would be a great feature!! Thanks |
Support for animation/live-updating will be at least another month or two from now. There are several other more basic enhancments that I want to release first (including, but not limited to, multiple sublpots, fill_between, tight_layout, and fixing several bugs that have been reported, just to mention a few of things being worked on presently). Rest assured, support for animation/live-updating will come. |
Wow, you're really quick in replying. Thanks a lot and of cause this is fine. I'm grateful for your effort! |
Excited to have this feature - it will greatly simplify my work! |
Yes can't wait! thanks for everything you do :) |
Looking forward to this feature as well. I also have some experimental code somewhere, but not near as thought out as @andresberejnoi has shared. Thank you |
I appreciate all the hard work you've been putting into this project. |
Also waiting for this feature :) |
Animation is now supported in mplfinance. |
Yessss Daniel!!!!!! Ty |
Thank you for your work. This feature will be very handy. |
Thanks Daniel! Much appreciated.
|
By the way, I know a lot of people were really looking forward to this feature (along with the feature to be able to pass in external Axes). I would love to see what creative things you do with it, and perhaps include some of them in the examples folder in this repository for others to see and learn what you can do. Please feel free to attach examples here, and/or submit a PR with one or more examples, and/or email me at [email protected] --- Very much appreciated! Thank you. --Daniel |
Sorry, how can I clone the repository again? Never really done it, I'd like to test this feature. Thank you Daniel |
@manuelwithbmw
HTH. All the best. --Daniel |
Great explanation, thank you (I made it after a long time) |
Is your feature request related to a problem? Please describe.
I am trying to rewrite a live chart plotting function I had with the previous mpl-finance module by using matplotlib animation.FuncAnimation method (documentation here).
The function expects to be passed a figure where to draw. For the func argument, I am passing a simple function
animate_plot
:When I run my code, I only get a blank canvas at the end. I am thinking that it could be because on each call to mplfinance.plot a new figure is created but I am not really sure.
Describe the solution you'd like
I would like to have another parameter option for mplfinance.plot to provide a previously created figure. Then it could be checked internally to see if the parameter was provided then that figure is used. If not, then the normal code creates one.
I think it could also be useful to have the function return the figure so it can still be used later. If these are things that are already possible then could you point me in the right direction where to find it?
Describe alternatives you've considered
I think it would be great if a live plotter method were implemented with mplfinance so there is no need to build around it.
It could be a method that uses the already existing .plot() similar to what I am doing above but better. This method could either animate a full dataframe like historical data and it could also animate continuously updating data.
I think this fits better for another feature request. I may open one soon once I have more time to think of how it could be implemented.
The text was updated successfully, but these errors were encountered: