我正在使用matplotlib绘制数据。
我想观看几秒钟内绘制的数据。
当前脚本(下面)关闭..它关闭现有的绘图并为每个while循环迭代创建一个包含一个附加数据点的新绘图。
如果在循环上面输入“fig =”和“ax1 =”语句,我只得到一个空白的图。
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import time
#import matplotlib.animation as animation
def animate2(i):
k=1
#fig=plt.figure()
#ax1=fig.add_subplot(1, 1, 1)
while k <=len(i):
fig=plt.figure()
ax1=fig.add_subplot(1, 1, 1)
ax1.clear
ax1.plot(i[0:k, 0], i[0:k, 1])
plt.show()
time.sleep(1)
k=k+1
这里是我使用的示例np数组:
test_data=np.array([[3, 7],[1, 2],[8, 11],[5, -12],[20, 25], [-3, 30], [2,2], [17, 17]])
animate2(test_data)
另外,如果你认为matplotlib.animation会更好用,请提供一个例子!
答案 0 :(得分:0)
使用matplot.animation
。它使用interval=miliseconds
代替time.sleep()
。 repeat
停止循环播放。 frames
可以是整数(帧数)或带数字的列表 - 列表中的每个元素都作为参数i
发送。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def animate2(i):
ax1.clear()
ax1.plot(test_data[0:i, 0], test_data[0:i, 1])
# ---
test_data=np.array([[3, 7],[1, 2],[8, 11],[5, -12],[20, 25], [-3, 30], [2,2], [17, 17]])
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
# create animation
animation.FuncAnimation(fig, animate2, frames=range(1, len(test_data)), interval=1000, repeat=False)
# start animation
plt.show()
您还可以使用fargs=tuplet-with-arguments
将自己的参数发送到函数
def animate2(i, data):
ax1.clear()
ax1.plot(data[0:i, 0], data[0:i, 1])
# ---
animation.FuncAnimation(fig, animate2, frames=range(1, len(test_data)),
fargs=(test_data, ), interval=1000)
编辑:
我使用此代码生成动画GIF
(需要安装imagemagick
:https://stackoverflow.com/a/25143651/1832058)
# create animation
ani = animation.FuncAnimation(fig, animate2, frames=range(1, len(test_data)), interval=1000, repeat=False)
# save animation
ani.save('animation.gif', writer='imagemagick', fps=1)
并得到了这个结果