0
点赞
收藏
分享

微信扫一扫

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


文章目录

  • ​​1、效果展示​​
  • ​​2、动画分析​​
  • ​​3、案例源码​​

1、效果展示

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

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

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


举报

相关推荐

0 条评论