Python实现动态绘图的示例详解 环球看点

时间:2023-05-07 12:00:09 来源: 脚本之家
目录
示例FuncAnimation三维情况

示例

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重复延时,单位是微秒repeatFalse时,动画将只演示一遍。

三维情况

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

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动态绘图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

标签:

精彩推送

周振宇调研高铁沿线综合整治和节日旅游安全工作_全球快资讯

5月1日,市委副书记、市长周振宇赴武陵区、柳叶湖旅游度假区和桃花源旅游管理区,调研高铁沿线综合整治、旅

来源:2023.05.04

阵风6-7级!暴雨将扑袭合肥_天天新要闻

大皖新闻讯据@合肥气象消息,合肥市气象台2023年05月04日06时发布,今天白天中等阵雨或雷雨,部分大到暴雨

来源:2023.05.04

乘联会:预估10月新能源乘用车厂商批发销量环比增长1% 天天微资讯

11月3日,乘联会发布10月新能源乘用车市场预判。考虑到主力企业中的个别企业10月减量因素与增量因素的平衡

来源:2023.05.04

最火“五一”!堵车、堵船、堵骆驼,看山、看水、看人海|信息

今年“五一”假期,回家探亲、外出旅游需求爆发,交通运输客流量大增,不仅出现了堵车现象,更有堵船、...

来源:2023.05.04

王嵘前往诸葛所检查指导工作

4月25日下午,兰溪市公安局党委委员、副局长王嵘前往诸葛派出所检查指导工作。阅读隐藏边栏发布日期:2023-

来源:2023.05.04

美国的真实目的曝光,耶伦再次喊话中国,外媒:这很美国

美国的真实目的曝光,耶伦再次喊话中国,外媒:这很美国,中国,欧盟,马克龙,数学家,国防部门,特种部队,美国

来源:2023.05.04

每日热议!激励型工作设计法_关于激励型工作设计法介绍

1、激励型工作设计法所提出的设计方案往往强调通过工作扩大化、工作丰富化等方式来提高工作的复杂性,同时

来源:2023.05.04

计算机二级证书丢了咋办(计算机二级证书丢了怎么办)

计算机二级证书丢了咋办,计算机二级证书丢了怎么办这个很多人还不知道,现在让我们一起来看看吧!1、不能补

来源:2023.05.03

猿题库高中怎么样网课真的有用吗 每日热点

1、猿题库高中怎么样因为质量不够好所以不能上榜。猿题库它是一款手机智能做题软件,已经完成对初中和高中6

来源:2023.05.03

新闻快讯

X 关闭

X 关闭

新闻快讯