Python 3.x 如何在python循环中更新matpplotlib绘图,使绘图位于Jupyter笔记本中的同一位置?

Python 3.x 如何在python循环中更新matpplotlib绘图,使绘图位于Jupyter笔记本中的同一位置?,python-3.x,matplotlib,plot,jupyter-notebook,Python 3.x,Matplotlib,Plot,Jupyter Notebook,我使用的是python 3.6.7、matplotlib 2.2.2、ipython 7.0.1、notebook 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=

我使用的是python 3.6.7、matplotlib 2.2.2、ipython 7.0.1、notebook 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创建了标题,以便更好地查看更新的内容。在本例中,绘图集仅在末尾显示(在循环期间不显示)。

如果使用
plt.show()
,则只能看到第一组绘图


我不想每次都保存绘图,以后再制作动画。知道我们能不能做到吗?怎么做?(我看了很多东西,但是我缺少了一些东西
plt.ion()
plt.show(block=False)
plt.pause(1)
时间.睡眠(0.1)
f=plt.figure()
f.canvas.update()
f.canvas.flush\u事件()
f.canvas.draw\u idle()

我似乎找到了一种方法,通过添加:

display.clear_output(wait=True)
display.display(plt.gcf())
time.sleep(1.0) 
还有两个小问题:

  • 在每次迭代中,每个步骤的信息都会被删除,并且只打印最后一个条目
  • 在最后一次迭代后,10个图的集合显示两次


我似乎找到了一种方法,通过添加:

display.clear_output(wait=True)
display.display(plt.gcf())
time.sleep(1.0) 
还有两个小问题:

  • 在每次迭代中,每个步骤的信息都会被删除,并且只打印最后一个条目
  • 在最后一次迭代后,10个图的集合显示两次


我也在做类似的事情……检查数据,在循环中创建一个绘图,并一次可视化每个绘图。您的代码帮助我纠正错误

在我的例子中,我每次都绘制一个新的绘图,为了避免循环结束时出现第二个图形,我使用了
plt.close()
。但在您的示例中,这将不允许保留以前的绘图。解决方法是创建数字并将其保存在列表中,以便在第二个循环中绘制

%matplotlib内联
导入时间
将pylab作为pl导入
从IPython导入显示
数字=[]
对于范围(3)中的i:
数字。附加(pl.randn(10))
对于范围(i+1)内的j:
pl.绘图(编号[j])
显示。清除输出(等待=真)
display.display(pl.gcf())
时间。睡眠(1.0)
plt.close()

我也在做类似的事情……检查数据,在循环中创建一个绘图,并一次将每个绘图可视化。您的代码帮助我将其正确化

在我的例子中,我每次都绘制一个新的绘图,为了避免循环结束时出现第二个图形,我使用了
plt.close()
。但在您的示例中,这将不允许保留以前的绘图。解决方法是创建数字并将其保存在列表中,以便在第二个循环中绘制

%matplotlib内联
导入时间
将pylab作为pl导入
从IPython导入显示
数字=[]
对于范围(3)中的i:
数字。附加(pl.randn(10))
对于范围(i+1)内的j:
pl.绘图(编号[j])
显示。清除输出(等待=真)
display.display(pl.gcf())
时间。睡眠(1.0)
plt.close()