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

 更新时间:2023年05月07日 09:13:15   作者:微小冷  
matplotlib中的animation提供了动态绘图功能,这篇文章主要为大家详细介绍了Python如何利用matplotlib实现动态绘图,感兴趣的可以了解一下

示例

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()

效果如下

其中,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实现动态绘图的示例详解的文章就介绍到这了,更多相关Python动态绘图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pytorch实现WGAN用于动漫头像生成

    Pytorch实现WGAN用于动漫头像生成

    这篇文章主要介绍了Pytorch实现WGAN用于动漫头像生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python使用opencv在Windows下调用摄像头实现解析

    python使用opencv在Windows下调用摄像头实现解析

    这篇文章主要介绍了python使用opencv在Windows下调用摄像头实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 利用python将pdf输出为txt的实例讲解

    利用python将pdf输出为txt的实例讲解

    下面小编就为大家分享一篇利用python将pdf输出为txt的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python实现系统状态监测和故障转移实例方法

    python实现系统状态监测和故障转移实例方法

    这篇文章主要介绍了用python实现系统状态监测和故障转移的代码方法
    2013-11-11
  • Python基础之操作MySQL数据库

    Python基础之操作MySQL数据库

    这篇文章主要介绍了Python基础之操作MySQL数据库,文中有非常详细的代码示例,对正在学习python基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Python time库基本使用方法分析

    Python time库基本使用方法分析

    这篇文章主要介绍了Python time库基本使用方法,结合实例形式分析了Python time模块基本功能、控制符、使用方法与操作注意事项,需要的朋友可以参考下
    2019-12-12
  • python3如何获取子线程中函数返回值

    python3如何获取子线程中函数返回值

    这篇文章主要介绍了python3如何获取子线程中函数返回值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • python和flask中返回JSON数据的方法

    python和flask中返回JSON数据的方法

    下面小编就为大家整理了一篇python和flask中返回JSON数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • python 打印出所有的对象/模块的属性(实例代码)

    python 打印出所有的对象/模块的属性(实例代码)

    下面小编就为大家带来一篇python 打印出所有的对象/模块的属性(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 如何用PyMongo在Python中操作MongoDB的超完整指南

    如何用PyMongo在Python中操作MongoDB的超完整指南

    本文详细介绍了如何使用Python的PyMongo库操作MongoDB,涵盖了数据库连接、文档创建、数据操作和高级功能的使用,通过这些知识点,开发者可以高效地管理和操作MongoDB数据库,需要的朋友可以参考下
    2024-11-11

最新评论