我的程序在控制台而不是GUI应用程序中运行。该类具有一个render函数,该函数使用mpl_finance显示OHLC来显示系统的内部表示。我的问题是,每当我调用render函数时,它都会显示一个窗口,并且必须关闭该窗口才能继续循环。有没有一种方法可以使循环继续并在每次调用render函数时使用相同的窗口。
我已经在matplotlib中尝试过FuncAnimation,但是它有两个问题。 1-动画循环与主循环是分开的。因此,当代码到达动画时,它将一直运行,而无需执行主循环的额外步骤。 2-仅显示第一个图表。也许是调试问题。
另一种解决方案是plt.ion(),但它会抛出大量窗口,并且所有窗口都没有响应。
以下是具有主要问题的代码,没有动画,没有plt.ion()。我也删除了数据处理代码,只专注于绘图部分
def render():
fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
candlestick_ohlc(ax1, ohlc, width=0.4, colorup='#77d879', colordown='#db3f3f')
for label in ax1.xaxis.get_ticklabels():
label.set_rotation(45)
ax1.xaxis.set_major_locator(mticker.MaxNLocator(10))
ax1.grid(True)
plt.xlabel('Date')
plt.ylabel('Price')
plt.title("CandleStick Chart")
plt.legend()
plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)
plt.show()
更新1: 所以基本上我有一个主要的功能,有一个for循环。 for循环调用两个方法,一个方法更新类的内部状态(将其视为类似于移动OHLC值),另一个方法调用呈现功能。 为此,我在for循环之前定义了plt.ion,然后在for循环内部定义了该函数,该函数在调用render函数之前在调用以下函数之后更新了内部状态
fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
然后我将ax1传递给了render函数,并称为time.sleep(5) 输出是多个窗口,它们什么也不显示,它们都是空的。如果我删除了plt.ion(),则图表可以完美显示,但是我必须手动关闭它才能使循环继续并获得新的图表窗口