Моя программа запускается в консоли, а не в приложении с графическим интерфейсом. класс имеет функцию рендеринга, которая показывает OHLC, используя mpl_finance, чтобы показать внутреннее представление системы. Моя проблема в том, что всякий раз, когда я вызываю функцию рендеринга, она показывает окно, и мне нужно закрыть окно, чтобы цикл продолжился. Есть ли способ заставить цикл продолжаться и использовать одно и то же окно каждый раз, когда он вызывает функцию рендеринга.
Я пробовал FuncAnimation в matplotlib, но у него было две проблемы.
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), а другой вызывает функциональность рендеринга.
для этого я определил plt.ion перед циклом for, а затем внутри цикла for, вызвав функцию, которая обновляет внутреннее состояние после того, как вызывается ниже, перед вызовом функции рендеринга
fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
затем я передал ax1 в функцию рендеринга и вызвал time.sleep (5)
Вывод - это несколько окон, и они ничего не показывают, все они пусты. если я уберу plt.ion (), график будет отображаться отлично, но мне придется закрыть его вручную, чтобы цикл продолжился и появилось новое окно графика