目录
各个图形覆盖的问题
1,画矩形并让其动起来
2,画一个三角形:动起来!
3,画一个三角形让其自动顺时针旋转
本教程基于前面的animation基础,让各种图形动起来:(网站上都没有博客写这一内容,本人首次记录,网上都是画一些和数据相关的图)
各个图形覆盖的问题
return 中 比如
return OS_trajectory,point_ani, #point_ani会覆盖OS_trajectory
1,画矩形并让其动起来
效果图:
代码:
基于前面的制作动画基础,只需修改update_points 函数就可以了。
注意,update_points返回多个对象时候,先画前面的,在画后面的,当两个物体重叠时候后面的对象会把前面的覆盖掉,这里只有一个对象,第二个例子 如果两个对象重叠pgon1,pgon2, pgon2会把前面的pgon1覆盖掉。当然这里没有重叠所以看不出来。
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def update_points(num):
'''
更新数据点,num代表当前帧的帧数,一定为整数,从0开始,FuncAnimation传入一个np.arange(0, 100),就是100帧,
'''
point_ani.set_x(x[num]) #让左下角的横坐标变成下一个x[]的点。
# point_ani.set_y(x[num]) # 可以让y也是一样的道理。
return point_ani,#text_pt, # 返回的对象的内容是下一个帧的数据内容。这里是下一帧的点的位置,和下一帧文本的位置
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y) # 这个图像曲线不画出来还不好使呢,不能正确呈现动态图。
point_ani = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='r', alpha=0.3) # 左下起点,长,宽,颜色,α
ax.add_patch(point_ani)
plt.grid(ls="--")
ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=100, blit=True)
ani.save('sin_test2.gif', writer='imagemagick', fps=10)
plt.show()
2,画一个三角形:动起来!
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def my_Polygon(x,y):
'''
顶点是第一个点坐标为xy,依次逆时针方向
:param x:
:param y:
:return:
'''
return plt.Polygon([[x, y],
[x-1, y-2],
[x+1, y-2]], color='g', alpha=0.5) # 0代表全部透明,1不透明
def update_points(num):
'''
更新数据点,num代表当前帧的帧数,一定为整数,从0开始,FuncAnimation传入一个np.arange(0, 100),就是100帧,
'''
pgon1.set_xy([[x[num],x[num]],
[x[num]-1,x[num]-2],
[x[num]+1,x[num]-2]])
pgon2.set_xy([[x[num],y[num]],
[x[num]-1,y[num]-2],
[x[num]+1,y[num]-2]])
# point_ani.set_y(x[num])
return pgon1,pgon2,#text_pt, # 返回的对象的内容是下一个帧的数据内容。这里是下一帧的点的位置,和下一帧文本的位置
x = np.linspace(-10, 10, 100)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y) # 这个图像曲线不画出来还不好使呢,不能正确呈现动态图。
# 我自己设置的规定顶点逆时针。顺序。
pgon1 = my_Polygon(4,0)
pgon2 = my_Polygon(0,-4)
ax.add_patch(pgon1)
ax.add_patch(pgon2)
plt.xlim(xmax=15,xmin=-15)
plt.ylim(ymax=15,ymin=-15)
plt.grid(ls="--")
ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=100, blit=True)
ani.save('sin_test2.gif', writer='imagemagick', fps=10)
plt.show()
3,画一个三角形让其自动顺时针旋转