Live Graph Matplotlib - использование того же окна для обновления графика в цикле - PullRequest
1 голос
/ 12 июня 2019

Моя программа запускается в консоли, а не в приложении с графическим интерфейсом. класс имеет функцию рендеринга, которая показывает 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 (), график будет отображаться отлично, но мне придется закрыть его вручную, чтобы цикл продолжился и появилось новое окно графика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...