1

我在 tkinter GUI 中有一个 pyplot 图,我正在尝试使用实时数据从每一秒更新candlestick_ohlc绘图。mplfinance

mySubplot = myFigure.add_subplot(111)

然后每秒运行新数据

mySubplot.clear()
...
repeat all axis formatting 
...
candlestick_ohlc(mySubplot, myData.values)

当只有最近的蜡烛发生变化时,重新格式化我的轴并重新绘制每根蜡烛是非常非常缓慢的。

最有效的方法是什么?

4

2 回答 2

1

好吧,我个人不会使用TkinterMPLfinance来做到这一点!

这是因为:

  1. Tkinter 的帧速率很糟糕,就像我的意思是绝对糟糕一样,你会很幸运通过使用 while 循环不断更改图像来获得 5 fps。
  2. Tkinter 陈旧过时,没有很多其他流行的 GUI 库(如 Qt 和 GTK)所具有的有用功能。
  3. 当您经常使用 MPLfinance 制作图表时,MPLfinance 非常密集,而且制作图表很慢,这会使您的交易平台变慢。
  4. 您的应用程序的文件大小将是巨大的。
  5. 数据不会准确。

我这样做以使其“实时”的方式是使用 cocurrent.futures 并行运行三个函数,一个函数将从 api 或通过网络抓取获取有关股票/货币/加密货币的数据(我不会t 建议这样做,因为延迟和延迟会很高),第二个函数将用于制作烛台图,第三个函数将用于运行循环以保持 gui 并随着图形的变化不断更新图形。

对于 GUI,我可能会使用称为 pygame 的“游戏引擎”,因为它具有更高的 fps,因为它旨在制作游戏,但这会使应用程序变得密集,但会使 fps 更高。如果您在 tkinter 中执行此操作,您会在图形发生变化时看到帧的闪烁,这真的很烦人。

于 2021-06-21T14:14:18.573 回答
1

我建议使用的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 执行相同操作所需的代码。

于 2021-06-21T17:19:51.830 回答