博文

目前显示的是 七月, 2021的博文

使用Matplotlib创建动图

图片
使用Matplotlib创建动图 最近在实验中需要利用来 生成对抗网络(generative adversary network) 来伪造相应数据,在查阅资料的过程中发现在训练过程中使用动图来表示生成器迭代次数效果图对于实验很有帮助. 例如下图生成正弦函数示意图: 但是,在 Jupyter Notebook 一个循环当中简单的调用 pyplot.plot(x, y) 只会在当前 单元(cell) 下不断产生新的图像,达不到预期效果. 经过一番资料查找,找到了如下的解决方案. IPython Display iPython 通常和 Jupyter Notebook 在一块,作为一个通用的科学计算发行包绑定在一块,而 iPython 内置了许多 魔法指令(magic command) 和包函数可以用来帮助达到我们的目的. 首先为了能够在 Jupyter Notebook 单元中产生图像,并且 将该图像保存在文档 中,需要在当前单元中使用魔法指令: %matplotlib inline . 这样当前 matplotlib 绘图后端被设置为 inline ,从而可以直接在当前单元下展示图像. 接着我们想要在同一个单元下反复画图,这样才能产生一种迭代效果.,因此我们还需要从 iPython 中导入 display 模块,对当前单元进行调整: 首先在循环开始前,需要先清空当前 图像(figure) 图像中的所有信息,因此我们需要调用 plt.clf() . 然后我们想要当前单元只产生一个图像,因此需要将其他的产生的图像清空,这时候需要使用 display.clear_output(wait=True) . 其中设置选项 wait=True 是为了等到下一个图像出现时才清除前一个图像,这样可以让图像之前的转化更加平滑. 最后我们需要展示当前图像,这时候使用 display.disply(plt.gcf()) 来展示当前图像. 其中 display.display(*objs) 在所有前端上显示目标,而 plt.gcf() 表示当前图像. 完整的实例代码如下: ​ x import matplotlib . pyplot as plt from IPython import display import numpy as np % matplot