Не удалось выделить растровое изображение (Python / matplotlib) - PullRequest
0 голосов
/ 10 ноября 2019

Я получаю эту ошибку при попытке построить в цикле. Это происходит в попытке / за исключением того, что я не получаю полную трассировку стека, просто "не удалось выделить растровое изображение" и программа завершается. Из того, что я вижу, это ошибка matplotlib, и люди предлагают запустить clf (), которой я являюсь. Я строю большие объемы данных, но не думаю, что этого должно быть достаточно, чтобы все испортить. во всяком случае, здесь в основном код.

def plot_data(data):
    pyplot.clf()
    buys_X, buys_y, sells_X, sells_y = [], [], [], []
    for index, row in data.iterrows():
        if row['action'] == 'BUY':
            buys_X.append(row['time'])
            buys_y.append(row['price'])
        elif row['action'] == 'SELL':
            sells_X.append(row['time'])
            sells_y.append(row['price'])

    data_cols = ['prof', 'price', 'quantity', 'pred']
    fig, axs = pyplot.subplots(len(data_cols), 1, constrained_layout=True, figsize=(15, 12))
    for idx, col in enumerate(data_cols):
        if col == 'price':
            axs[idx].plot(data['time'], data[col], linewidth=0.75)
            axs[idx].scatter(buys_X, buys_y, color='red', s=12.5)
            axs[idx].scatter(sells_X, sells_y, color='green', s=12.5)
        elif col == 'pred':
            axs[idx].plot(data['time'], data['curr_ratio'], label='curr_ratio')
            axs[idx].plot(data['time'], data['pred'], label='pred')
            axs[idx].axhline(0.5, color='black')
            axs[idx].legend()
        elif col == 'prof':
            axs[idx].plot(data['time'], data[col])
            axs[idx].axhline(0, color='black')
        elif col == 'quantity':
            axs[idx].plot(data['time'], data[col])

        axs[idx].set_title(col)
        axs[idx].xaxis.grid(True)

        if idx == len(data_cols) - 1:
            for tick in axs[idx].get_xticklabels():
                tick.set_rotation(45)
        else:
            axs[idx].xaxis.set_ticklabels([])
    pyplot.savefig('plots.png', dpi=100)

Так что я запускаю это в цикле и поставляю фрейм данных для функции. Каждый раз, когда я добавляю строку, я делаю новый график, и каждую минуту добавляется новый ряд. Однако я получаю эту ошибку примерно через 3-4 часа после запуска моей программы. Любые идеи, почему это происходит и что я могу сделать, чтобы это исправить? Я попытался снизить dpi, и это, кажется, помогает, но я не уверен, что это что-то, что может быть связано с ошибкой.

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