matplotlib 绘制动画
来源:互联网 发布:安卓录像软件 编辑:程序博客网 时间:2024/05/21 06:58
matplotlib动画
载入matplotlib动画绘制工具:
import matplotlib.animation as animationimport matplotlib.pyplot as plt
matplotlib有两个动画类:
- FuncAnimation: 通过反复调用同一函数来制作动画
- ArtistAnimation: 通过调用一个固定的Artist对象来制作动画,例如给定的系列图片或者matplotlib的绘图对象.
这两个类都需要传入实例对象. 动画由时间器timer驱动, 通常是GUI的主框架(host framework)的timer.
动画的保存:
Animation.save()
Animation.to_html5_video()
FuncAnimation
下面给出FuncAnimation 的调用例子, 附带详细说明.
import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animationfig = plt.figure() # 获取matplotlib的绘图figure对象def f(x, y): # 函数定义 return np.sin(x) + np.cos(y)x = np.linspace(0, 2 * np.pi, 120) y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)im = plt.imshow(f(x, y), animated=True) # 调用imshow实现绘图.这里参数animated=True很重要def updatefig(*args): # FuncAnimation会将updatefig中的数据传递给绘图句柄,从而更新绘图 global x, y x += np.pi / 15. y += np.pi / 20. im.set_array(f(x, y)) return im, # 这里的,很重要.ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True)plt.show()
同样的这段代码,如果用ArtistAnimation()实现的话:
import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animationfig = plt.figure()def f(x, y): return np.sin(x) + np.cos(y)x = np.linspace(0, 2 * np.pi, 120)y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)# ims is a list of lists, each row is a list of artists to draw in the# current frame; here we are just animating one artist, the image, in# each frameims = [] # 图片序列for i in range(60): x += np.pi / 15. y += np.pi / 20. im = plt.imshow(f(x, y), animated=True) ims.append([im]) # 每张图片都用单独list的形式加入到图片序列中ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True, repeat_delay=1000)# ani.save('dynamic_images.mp4')plt.show()
对比一下两个绘图函数,就可以发现:
ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True)ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True, repeat_delay=1000)
两者的参数基本一样,都是需要传入一个fig对象,一个更新驱动(FuncAnimation是需要一个更新的函数句柄,ArtistAnimation需要的是一个载入图像的函数句柄list.), 一个时间间隔interval,还有blit设置为True.参数repeat_delay只对ArtistAnimation起作用.
下面给出一个用opencv读取已有的图片,再用matplotlib的annimation实现动画效果的代码:
import matplotlib.pyplot as pltimport matplotlib.animation as animationimport cv2 fig = plt.figure()ims = []for i in range(24): # 用opencv读取图片 if i < 10: img = cv2.imread('200.0_00'+str(i)+'.png') else: img = cv2.imread('200.0_0'+str(i)+'.png') (r, g, b) = cv2.split(img) img = cv2.merge([b,g,r]) im = plt.imshow(img, animated=True) ims.append([im])# 用animation中的ArtistAnimation实现动画. 每帧之间间隔500毫秒, 每隔1000毫秒重复一次,循环播放动画.ani = animation.ArtistAnimation(fig, ims, interval=500, blit=True, repeat_delay=1000)
阅读全文
0 0
- matplotlib 绘制动画
- Matplotlib绘制动画
- matplotlib绘制动画的示例
- matplotlib绘制动画的示例
- matplotlib-绘制精美图表
- matplotlib绘制简单图
- matplotlib 散点图绘制
- 使用matplotlib绘制图表
- matplotlib 绘制三维图
- matplotlib绘制决策边界
- matplotlib绘制基本图形
- matplotlib绘制K线图
- 使用matplotlib绘制散点图
- Matplotlib绘制树形图
- Matplotlib绘制甘特图
- matplotlib绘制条形图
- matplotlib 绘制条形图
- matplotlib绘制等直线
- Qt之QSS(黑色炫酷)
- 企业的商业模式和盈利模式概述
- 手机日期插件mobiscroll奇巧淫技&mobiscroll 中文API
- Spring Boot应用的健康监控
- angular4 路由实际使用中的应用场景
- matplotlib 绘制动画
- Qt之加载QSS文件
- 面试体记录第六节——(handlerThread、intentservice、view)
- adb 拷贝手机中的文件到电脑
- SpringBoot四大神器之Actuator
- 传教士过河问题
- 40余家服饰品牌撤出京东,折射京东天猫电商第一之争
- SqlServer2000 调用Http接口的存储过程
- 第三周 【项目3