如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?
Posted
技术标签:
【中文标题】如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?【英文标题】:How to update matpplotlib lib plots in a python loop with the plot sitting in the same place in a Jupyter notebook? 【发布时间】:2019-05-23 00:35:27 【问题描述】:我正在使用 python 3.6.7、matplotlib 2.2.2、ipython 7.0.1、笔记本 5.6.0 和 jupyter 1.0.0。
我想创建 10 个显示在 2 行上的图,这些图在循环期间将保持在 jupyter notebook 上的同一位置,并且每 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)
time.sleep(0.1)
f = plt.figure()
f.canvas.update()
f.canvas.flush_events()
f.canvas.draw_idle()
【问题讨论】:
how to dynamically update a plot in a loop in ipython notebook (within one cell)的可能重复 【参考方案1】:似乎我找到了一种通过添加来做我想做的事情的方法:
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)
【讨论】:
【参考方案2】:我正在做类似的事情...检查数据,在循环中创建一个图,并一次将它们可视化。你的代码帮助我做对了!
在我的情况下,我每次都制作一个新图,为了避免循环结束时出现第二个数字,我使用了plt.close()
。但是在您的示例中,这将不允许保留以前的图。解决方法是创建数字并将它们保存在一个列表中,以便在第二个循环中绘制。
%matplotlib inline
import time
import pylab as pl
from IPython import display
numbers = []
for i in range(3):
numbers.append(pl.randn(10))
for j in range(i+1):
pl.plot(numbers[j])
display.clear_output(wait=True)
display.display(pl.gcf())
time.sleep(1.0)
plt.close()
【讨论】:
以上是关于如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?
python 如何在多层循环中使用break/continue