Как обновить графики lib в matpplotlib в цикле python так, чтобы график находился в одном месте в блокноте Jupyter? - PullRequest
0 голосов
/ 23 декабря 2018

Я использую python 3.6.7, matplotlib 2.2.2, ipython 7.0.1, ноутбук 5.6.0 и jupyter 1.0.0.

Я хотел бы создать 10 графиков, отображаемых в 2 строках, которые останутсяв том же месте на ноутбуке Jupyter во время цикла, и новые результаты будут отображаться каждые 10 итераций на тех же 10 графиках.Вот некоторый фиктивный код только для иллюстрации.

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 5, sharex='col', sharey='row', figsize=(40,15))
ax = ax.flatten()
for i in range(TRAIN_STEPS):
    if i%10 == 0:
        for j in range(10):
            ax[j].set_title(j+i,fontsize=40)
            ax[j].axes.get_xaxis().set_visible(False)
            ax[j].axes.get_yaxis().set_visible(False)
            ax[j].imshow(weight[i]), cmap=plt.get_cmap('seismic'))
    if i%100 == 0:
         print('Step:' + str(i)) 

Я создал заголовок с помощью i + j, чтобы лучше видеть, что было обновлено.В этом примере набор графиков отображается только в конце (не во время цикла).Example 1

Если я использую plt.show(), то я вижу только первый набор графиков Example 2

Не знаюхотите сохранить сюжеты в каждом наборе и сделать анимацию позже.Есть идеи, можем ли мы это сделать и как?(Я смотрю на многие вещи, но мне чего-то не хватает plt.ion() plt.show(block=False) plt.pause(1) time.sleep(0.1) f = plt.figure() f.canvas.update() f.canvas.flush_events() f.canvas.draw_idle()

1 Ответ

0 голосов
/ 25 декабря 2018

Кажется, я нахожу способ сделать то, что хотел, добавив:

display.clear_output(wait=True)
display.display(plt.gcf())
time.sleep(1.0) 

Еще 2 незначительных проблемы:

  • информация для каждого шага отбрасывается на каждомитерация и только последняя запись печатается.
  • набор из 10 графиков отображается дважды после последней итерации.Его можно легко воспроизвести, используя следующий код, найденный в другом потоке

    %matplotlib inline
    import time
    import pylab as pl
    from IPython import display
    for i in range(10):
          pl.plot(pl.randn(100)) 
          display.clear_output(wait=True) 
          display.display(pl.gcf())
          time.sleep(1.0)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...