欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python之数据分析(生成动态图像、示波器效果)

程序员文章站 2022-07-02 23:46:07
文章目录1、效果展示2、动画分析3、案例源码1、效果展示动态更新波形图:静态图:2、动画分析这是一个使用了生成器的动画效果,生成器里面会不断生成新的值,然后放到更新函数里面在指定的interval间隔时间里执行,将其渲染出图像def 更新函数(生成值): 更新画面帧来渲染def 生成器(): for...: 产生新的数据 yield 生成值创建动画:ma.FuncAnimation(图形对象, 更新函数, 生成器, interv...

1、效果展示

  • 动态更新波形图:
    Python之数据分析(生成动态图像、示波器效果)
  • 静态图:
    Python之数据分析(生成动态图像、示波器效果)

2、动画分析

  • 这是一个使用了生成器的动画效果,生成器里面会不断生成新的值,然后放到更新函数里面在指定的interval间隔时间里执行,将其渲染出图像
def 更新函数(生成值):
    更新画面帧来渲染
def 生成器():
    for...:
        产生新的数据
        yield 生成值
  • 创建动画:ma.FuncAnimation(图形对象, 更新函数, 生成器, interval=间隔时间(毫秒))

3、案例源码


import numpy as np
import matplotlib.pylab as mp
import matplotlib.animation as ma

mp.figure("Signal", facecolor='lightgray')
mp.title('Signal', fontsize=20)
mp.xlabel('Time', fontsize=14)  # 横纵坐标标签
mp.ylabel('Signal', fontsize=14)

ax = mp.gca()  # 获取坐标轴
ax.set_ylim(-3, 3)  # 垂直坐标范围
ax.set_xlim(0, 10)
mp.tick_params(labelsize=10)  # 精度值
mp.grid(linestyle=':')  # 网格线


# 创建一个plot空对象(只是没有数据,仍然是一个完整的图像)
pl = mp.plot([], [], c="orangered")[0]  # 有很多个元素,此处取一个处理
pl.set_data([], [])  # 设置数据,此处给的空数据,以便于之后将生成器的数据传入

# 接收生成器数据的更新函数
def update(data):
    t, v = data  # 时间,生成器的值
    x, y = pl.get_data()  # 获取生成器数据
    # 追加数据
    x.append(t)
    y.append(v)

    # 移动坐标轴位置,以便持续观察数据
    # 获取当前坐标轴的最小值与最大值,即坐标系的左右边界
    x_min, x_max = ax.get_xlim()
    if t >= x_max:
        # 平移坐标轴:将最小值变为当前位置减去窗口宽度,最大值变为当前值
        ax.set_xlim(t - (x_max - x_min), t)
        # 坐标系起点终点都改变了,需要重新画一个画布
        ax.figure.canvas.draw()
    # 修改数据
    pl.set_data(x, y)


# 生成器函数
def generator():
    t = 0  # 时间
    while True:
        # 用正弦函数来生成数据
        v = np.sin(2 * np.pi * t) * np.exp(
            np.sin(0.2 * np.pi * t)
        )  # 振幅呈正弦规律变化的正弦函数
        yield t, v  # yield的会保存状态的返回,与return不同
        t += 0.05


# 生成动画
anim = ma.FuncAnimation(mp.gcf(), update, generator, interval=5)

mp.show()

本文地址:https://blog.csdn.net/Viewinfinitely/article/details/107326826