原始动画绘制
1.在绘制图形,图像过程中,可以借助绘制时间的控制,逐步显示绘制内容,进而达到图形,
图像动态显示的效果
用plot()和scatter()绘制正弦波和散点图,其中散点图是动态沿着正弦波绘制.实现代码如下(我的测试环境是IDIE,如果是Jupyter Notebook环境下,效果不是很明显)
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0,2*np.pi,300)
y = np.sin(3*x)+5
plt.plot(x,y,color='r')
x1 = x[::2]
y1 = y[::2]
i = 0
for pos in x1:
ax.scatter(pos,y1[i],c='b',marker='.')
i += 1
plt.pause(0.008)
plt.show()
如果是在Jupyter Notebook环境下需要在开头加入以下两行代码:
%matplotlib notebook
from IPython import display
2.draw()方法
plt.draw()可以根据提供的新数据,重新在数据区域绘制相应的新图形。
要改变,需要通过类似plt.plot(),plt.scatter()绘制工具返回的实例 ax 所附带的ax.set_xdata(x),ax.set_ydata(y)改变原先图形的x,y坐标范围,以达到改变图形的目的.至于动画效果,则是通过时间间隔的控制,让plt.draw有规律地反复重新绘制图帧,实现帧的动态替换。
1)简单重画设置
这里采用plt.draw()函数,根据plt.plot()绘图工具x,y坐标的变化,而重新动态绘制。代码如下
import numpy as np
import math
import matplotlib.pyplot as plt
from time import sleep
plt.subplots()
xMax = 500
x = np.linspace(0,2*np.pi,xMax)
y = np.sin(x)
plt.plot(x,y,'b--')
sleep(0.5)
ax,= plt.plot(x,y,'ro')
i = 0
while i <= xMax:
plt.pause(0.002)
y1 = np.sin(x[:i])
ax.set_xdata(x[:i])
ax.set_ydata(y1)
plt.draw()
i += 2
plt.show()
2. 带按钮控制动画
下列代码采用 draw()方法重新绘制给予值的图形,实质上也是通过 sleep()来控制绘制进度,实现动态绘制的效果.
import numpy as np
from threading import Thread
import math
import matplotlib.pyplot as plt
from time import sleep
from matplotlib.widgets import Button
fig,ax = plt.subplots()
x = np.arange(0,1,0.001)
y = np.sin(4*np.pi*x)*np.exp(-x)
ax, = plt.plot(x,y,lw=1,marker='D',color='c')
class ButtonHandler:
def __init__(self):
self.flag = True
self.x_s,self.x_e,self.x_step = 0,1,0.01
def threadStart(self):
while self.flag:
sleep(0.02)
self.x_s += self.x_step
self.x_e += self.x_step
x1 = np.arange(self.x_s,self.x_e,self.x_step)
y1 = np.sin(4*np.pi*x1)*np.exp(-x1)
ax.set_xdata(x1-x1[0])
ax.set_ydata(y1)
plt.draw()
def Start(self,event):
self.flag = True
t1 = Thread(target=self.threadStart)
t1.start()
def Stop(self,event):
self.flag = False
callback = ButtonHandler()
y1 = 0.8
ax1 = plt.axes([0.81,0.05+y1,0.1,0.075])
bs = Button(ax1,'Stop',color='m')
bs.on_clicked(callback.Stop)
ax2 = plt.axes([0.7,0.05+y1,0.1,0.075])
bp = Button(ax2,'Start',color='y')
bp.on_clicked(callback.Start)
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)