RuntimeError Преобразование Matplotlib в Plotly - PullRequest
0 голосов
/ 31 января 2019

Возникли проблемы при построении с помощью Plotly с использованием синтаксиса matplotlib.Код matplotlib работает нормально, когда я пытаюсь использовать Plotly в соответствии с их документами, я получаю ошибки при попытке запустить: https://plot.ly/matplotlib/getting-started/

Код:

def analyze(context=None, perf=None):
    end = time.time()
    log.info('elapsed time: {}'.format(timedelta(seconds=end - context.start_time)))

    import matplotlib
    matplotlib.use('tkagg')

    import matplotlib.pyplot as plt
    import plotly.plotly as py
    mpl_fig = plt.figure()
    # The quote currency of the algo exchange
    quote_currency = list(context.exchanges.values())[0].quote_currency.upper()

    # First chart: Portfolio Value. Plot the portfolio value over time.
    ax1 = plt.subplot(611)
    perf.loc[:, 'portfolio_value'].plot(ax=ax1)
    ax1.set_ylabel('Portfolio\nValue\n({})'.format(quote_currency))

    # Second chart: Asset price. Plot the price increase or decrease over time.
    ax2 = plt.subplot(612, sharex=ax1)
    perf.loc[:, 'close_price'].plot(ax=ax2, label='Price')

    ax2.set_ylabel('{asset}\n({quote})'.format(
        asset=context.market.symbol, quote=quote_currency
    ))

    transaction_df = extract_transactions(perf)
    if not transaction_df.empty:
        buy_df = transaction_df[transaction_df['amount'] > 0]
        sell_df = transaction_df[transaction_df['amount'] < 0]
        ax2.scatter(
            buy_df.index.to_pydatetime(),
            perf.loc[buy_df.index.floor('1 min'), 'close_price'],
            marker='^',
            s=100,
            c='green',
            label=''
        )
        ax2.scatter(
            sell_df.index.to_pydatetime(),
            perf.loc[sell_df.index.floor('1 min'), 'close_price'],
            marker='v',
            s=100,
            c='red',
            label=''
        )

    # Third chart: Cash. Plot our cash
    ax4 = plt.subplot(613, sharex=ax1)
    perf.loc[:, 'cash'].plot(
        ax=ax4, label='Quote Currency ({})'.format(quote_currency)
    )
    ax4.set_ylabel('Cash Flow\n({})'.format(quote_currency))

    perf['algorithm'] = perf.loc[:, 'algorithm_period_return']

    # Fourth chart: Performance vs Holding. Plot algorithm performance against holding asset
    ax5 = plt.subplot(614, sharex=ax1)
    perf.loc[:, ['algorithm', 'price_change']].plot(ax=ax5)
    ax5.set_ylabel('Performance\nvs Hold')

    # Fifth charg: RSI. Plot RSI over time period.
    ax6 = plt.subplot(615, sharex=ax1)
    perf.loc[:, 'rsi'].plot(ax=ax6, label='RSI')
    ax6.set_ylabel('RSI')
    ax6.axhline(context.RSI_OVERBOUGHT, color='darkgoldenrod')
    ax6.axhline(context.RSI_OVERSOLD, color='darkgoldenrod')

    if not transaction_df.empty:
        ax6.scatter(
            buy_df.index.to_pydatetime(),
            perf.loc[buy_df.index.floor('1 min'), 'rsi'],
            marker='^',
            s=100,
            c='green',
            label=''
        )
        ax6.scatter(
            sell_df.index.to_pydatetime(),
            perf.loc[sell_df.index.floor('1 min'), 'rsi'],
            marker='v',
            s=100,
            c='red',
            label=''
        )
    plt.legend(loc=3)
    start, end = ax6.get_ylim()
    ax6.yaxis.set_ticks(np.arange(0, end, end / 5))

    # Show the plot.
    plt.gcf().set_size_inches(18, 8)
    plt.show()
    timestr = time.strftime('%Y-%m-%d')
    unique_url = py.plot_mpl(mpl_fig, filename=timestr, fileopt='new')
    pass

Код I, добавленный для Plotly (Iполучить ту же проблему, не используя 'tkagg'):

import matplotlib
matplotlib.use('tkagg')

import matplotlib.pyplot as plt
import plotly.plotly as py
mpl_fig = plt.figure()

timestr = time.strftime('%Y-%m-%d')
unique_url = py.plot_mpl(mpl_fig, filename=timestr, fileopt='new')

Ошибка:

    raise RuntimeError('Cannot get window extent w/o renderer')

RuntimeError: Cannot get window extent w/o renderer

Следовал инструкциям, как показано в этой теме: Seaborn matplotlib: Не удается получить окноэкстент без рендерера (RuntimeError)

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