⽤Python的matplotlib库动态显⽰不断增长的数据
"""
Created on Mon Dec 07 16:34:10 2015
@author: SuperWang
"""
import matplotlib.pyplot as plt
import numpy as np
fig,ax=plt.subplots()
fig2,ax2=plt.subplots()
y1=[]
y2=[]matplotlib中subplot
for i in range(50):
y1.append(np.sin(i))
y2.s(i))
ax.cla()
ax.set_title("Loss")
ax.set_xlabel("Iteration")
ax.set_ylabel("Loss")
ax.set_xlim(0,55)
ax.set_ylim(-1,1)
ax.plot(y1,label='train')
ax.plot(y2,label='test')
ax.legend(loc='best')
ax2.cla()
ax2.set_title("Loss")
ax2.set_xlabel("Iteration")
ax2.set_ylabel("Loss")
ax2.set_xlim(0,55)
ax2.set_ylim(-1,1)
ax2.plot(y1,label='train')
ax2.plot(y2,label='test')
ax2.legend(loc='best')
plt.pause(1)
要解决的问题如标题所⽰,原理很简单,就是当数据增长时,不断清空以前的绘画内容,然后把现有的数据重新画出来(数据是胡乱⽣成的)。具体过程如下:
fig,ax=plt.subplots() 产⽣⼀个figure对象和⼀个axis对象。figure相当于⼀个窗⼝,⽽axis相当于⼀个画布。此句也可以⽤两句⽣成,即fig=plt.figure(num),括号中的参数是figure的ID,如果只需创建⼀个figure对象,那么可以省略。然后
ax=fig.subplot(1,1,1),subplot()的具体⽤法可以去google或百度⼀下。ax.cla()就是在新数据到来时,先把之前的绘制的内容清空,接下来,ax.set_title(“Loss”),ax.set_xlabel(“Iteration”),ax.set_ylabel(“Loss”)都很简单,见名知意。
ax.set_xlim(0,55),ax.set_ylim(-1,1)分别⽤来设置x轴和y轴的两个端点。ax.grid()给画布加上⽹格。
ax.plot(y1,label=’train’),ax.plot(y2,label=’test’)这两句是实际的绘制命令,其中,参数label是为以后⽣成图例⽤的。
ax2.legend(loc=’best’)⽤来⽣成图例,loc参数代表图例位置location,⽽value:‘best’是其中的⼀种选择,除此之外,还有左上⾓等其他选项。最后,plt.pause(1)是为了显⽰上更直观,故意每绘制⼀次,暂停1秒,注意,这⾥的单位是秒。如果是实际的应⽤,⽽数据⽣成的过程⼜⽐较慢,此句完全可以省略。
这段代码中创建了两个窗⼝,在实验过程中,我发现只能有⼀个窗⼝被选中,即⽤⿏标点击哪个窗⼝,哪个窗⼝会动态地显⽰绘画过程,⽽另⼀个保持不动。绘画过程截图如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论