Python实现动态绘图的示例详解

作者:微小冷 时间:2021-07-08 16:44:40 

示例

matplotlib中的animation提供了动态绘图功能,下面列举一个最简单的动态绘制三角函数的例子,来初步演示一下。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots(figsize=(5,3))
line, = ax.plot([], [], lw=1)
ax.grid()

def init():
   ax.set_ylim(-1, 1)
   ax.set_xlim(0, 10)
   line.set_data([],[])
   plt.tight_layout()
   return line,

def animate(N):
   x = np.arange(N)/10
   y = np.sin(x)
   line.set_data(x, y)
   return line,

ani = animation.FuncAnimation(fig, animate, range(100), init_func=init, interval=40)
ani.save("ani_test_0.gif")
plt.show()

效果如下

Python实现动态绘图的示例详解

其中,fig, ax为绘图窗口和坐标轴,这是在任何绘图操作中都涉及到的元素,但在本例中的动态绘图操作中,ax是以一种"全局变量"的形式存在的,将在后米娜的initanimate函数中被直接调用。

line即为绘制在ax之上的曲线,由于ax.plot默认返回一个曲线列表,通过line,=这样的方法,可以提取出曲线列表中的第0条曲线,其结果等价于

line = ax.plot([], [], lw=1)[0]

接下来init函数用于绘图曲线的初始化,animate用于调整绘图函数的动态变化,其输入N暂时可以简单地理解为第N张图像的曲线。

接下来,就是动态绘图的核心对象FuncAnimation

FuncAnimation

FuncAnimation是一个类,其构造函数为

FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)

前面的4个参数在示例程序中已经用到,fig为绘图窗口;func为图像更新函数;frames为绘图帧号;init_func为图像的初始化函数。

其绘图逻辑写成伪代码类似于

for n in frames:
   if n>0:
       draw(func(n))
   else:
       draw(init(n))

如果frames是一个整数,则在调用时会自动转为range(frames)

而用于绘图的主要对象,就是坐标轴ax,故而在示例中的animate以及init函数的返回对象是line,,当然也可以写成return [line]

FuncAnimation中的其他参数含义如下:

  • fargs 为绘图函数func的其他输入参数

  • save_count 缓存帧数

  • interval 帧延时,默认200毫秒,帧率25fps对应40毫秒。

  • repeat_delay 重复延时,单位是微秒

  • repeat 为False时,动画将只演示一遍。

三维情况

三维情况的动图绘制函数,机理与二维是相同的,下面引用官方画廊中的示例,来演示一下三维动图的绘制流程,首先生成一组随机行走的曲线

np.random.seed(19680801)        # 随机数种子,便于复现

def random_walk(N, L=0.05):
   st = np.random.random(3)
   steps = np.random.uniform(-L, L, size=(N, 3))
   walk = st + np.cumsum(steps, axis=0)
   return walk

walks = [random_walk(30) for index in range(40)]

random_walk可生成一条随机行走的三维曲线,walks通过调用这个函数,共生成了40条曲线,下面就是对这40条曲线的调用

def animate(num, walks, lines):
   for line, walk in zip(lines, walks):
       line.set_data(walk[:num, :2].T)
       line.set_3d_properties(walk[:num, 2])
   return lines

fig = plt.figure(figsize=(5,4))
ax = fig.add_subplot(projection="3d")

lines = [ax.plot([], [], [], lw=1)[0] for _ in walks]

ax.set(xlim3d=(0, 1), xlabel='X')
ax.set(ylim3d=(0, 1), ylabel='Y')
ax.set(zlim3d=(0, 1), zlabel='Z')

ani = animation.FuncAnimation(
   fig, animate, 30, fargs=(walks, lines), interval=100)

plt.show()

效果如下

Python实现动态绘图的示例详解

来源:https://blog.csdn.net/m0_37816922/article/details/130482233

标签:Python,动态,绘图
0
投稿

猜你喜欢

  • C#自动创建数据库实现代码

    2024-01-17 14:18:03
  • go语言定时器Timer及Ticker的功能使用示例详解

    2024-02-09 09:17:45
  • SQL SERVER 2008数据库日志文件收缩的方法

    2024-01-27 09:29:38
  • mysql 重要日志文件汇总

    2024-01-28 20:34:55
  • System.Runtime.InteropServices.COMException的解决方法

    2023-07-18 15:03:27
  • Mysql查询日期timestamp格式的数据实现

    2024-01-22 08:59:55
  • 分享8点超级有用的Python编程建议(推荐)

    2022-03-31 08:05:57
  • vue使用nprogress加载路由进度条的方法

    2024-05-02 17:02:22
  • Python Lambda函数使用总结详解

    2022-05-07 11:41:31
  • Python编写可视化界面的全过程(Python+PyCharm+PyQt)

    2022-02-23 02:21:36
  • 详解微信小程序网络请求接口封装实例

    2024-06-12 04:08:54
  • Golang中的panic之避免和处理程序中的异常情况

    2024-02-20 10:22:49
  • python 实现数字字符串左侧补零的方法

    2021-07-07 10:34:43
  • vue使用v-for实现hover点击效果

    2024-05-02 17:09:03
  • Pandas 按索引合并数据集的方法

    2023-06-01 13:35:10
  • ASP中将Excel数据导入到Access

    2009-02-02 09:15:00
  • ASP四级连动下拉列表程序段

    2009-07-03 15:33:00
  • Python切片操作实例分析

    2022-05-02 17:49:25
  • 用Eclipse写python程序

    2022-03-24 02:24:25
  • Python通用验证码识别OCR库ddddocr的安装使用教程

    2021-11-04 21:21:27
  • asp之家 网络编程 m.aspxhome.com