问题描述
我在 tkinter GUI 中有一个 pyplot 图,我正在尝试使用实时数据每秒从 candlestick_ohlc
更新 mplfinance
图。
mysubplot = myfigure.add_subplot(111)
然后每秒运行一次新数据
mysubplot.clear()
...
repeat all axis formatting
...
candlestick_ohlc(mysubplot,myData.values)
当只有最近的蜡烛发生变化时,重新格式化我的轴并重新绘制每根蜡烛的速度非常慢。
最有效的方法是什么?
解决方法
我建议使用 new mplfinance API(mpf.plot()
而不是 candlestick_ohlc()
)。它在处理方面可能不是更有效(虽然我怀疑它效率更高)但它在代码量方面肯定更有效您将不得不编写,因为新 API 为您完成了大量 matplotlib 格式设置和其他工作。
我建议,在使用“外部轴模式”的动画支持功能的新 API 中。这将允许您与 tkinter 进行交互。有关 mplfinance 中动画的一般示例,请参阅 https://github.com/matplotlib/mplfinance/blob/master/markdown/animation.md 及其中的链接(例如 https://github.com/matplotlib/mplfinance/blob/master/examples/mpf_animation_demo2.py)。我认为您将能够将这些示例中的代码调整为使用 tkinter 执行相同操作所需的内容。
,我个人我不会使用Tkinter和MPLfinance来做这件事!
这是因为:
- Tkinter 的帧速率很糟糕,就像我的意思是绝对糟糕,你会很幸运通过使用 while 循环不断改变图像来获得 5 fps。
- Tkinter 陈旧过时,没有其他流行的 GUI 库(如 Qt 和 GTK)所具有的许多有用功能。
- 当您经常使用 MPLfinance 制作图表时,它会非常密集,而且制作图表的速度很慢,这会导致您的交易平台变慢。
- 您的应用程序的文件会很大。
- 数据不会准确。
我这样做以使其“实时”的方法是通过使用 cocurrent.futures 并行运行三个函数,一个函数将从 api 或通过网络抓取获取有关股票/货币/加密货币的数据(我不建议这样做,因为延迟和延迟会很高),第二个函数将用于制作烛台图,第三个函数将用于运行循环以保持 gui 并不断更新图形图片变化。
对于 GUI,我可能会使用称为 pygame 的“游戏引擎”,因为它具有更高的 fps,因为它旨在制作游戏,但是这会使应用程序密集,但会使 fps 更高。如果您在 tkinter 中执行此操作,您会看到框架在图形变化时闪烁,这真的很烦人。