在 Python 中对数据进行动画处理 – 简单指南

当我们听到数据可视化这个术语时我们实际上会想到什么?暂时我们可以了解图形、线图、散点图等。但是,如果我们可以创建一些实时图呢?这些不是视频记录,它只是纯粹的编程和使用一些库。我们能够制作精美的图表、直方图、偏差等动画。

库和环境设置简介

我们要使用的库是:

  1. Matplotlib
  2. 西博恩
  3. 麻木

集成开发环境环境:

  1. 视觉工作室代码
  2. 蟒蛇环境
  3. Python版本:3.9.7

Matplotlib的动画类

Matplotlib 是一个非常著名的库,它使绘图变得更加容易。它是免费和开源的,并且文档提供了简单的入门指南。为了动画目的,它提供了一个特殊的类,即:“animation”这个类有几个函数可以满足我们在 Python 中对任何数据进行动画处理的要求。我们将看到如何使用简单的代码来使用它。

可以查看官方文档: https: //matplotlib.org/stable/api/animation_api.html

首先,让我们简要了解一下通过计算过程可视化的图表类型。

Matplotlib 中的静态图

它们只是描述轴上几个点上的数据流的图片。

Matplotlib 中的动画绘图

这些实际上通过在屏幕上一一呈现每个像素来告诉点所在的位置。这使得情节变得生动起来。

简单散点图与动画散点图

简单散点图的代码:

from matplotlib import pyplot as plt
import random
import sys
 
x = []
y = []
 
for i in range(0, 50):
    x.append(random.randint(0, 100))
    y.append(random.randint(0, 100))
         
# plt.xlim(0, 100)
# plt.ylim(0, 100)
plt.xlabel("X-axis")
plt.ylabel("Y-plot")
plt.title("Simple x-y plot")
plt.scatter(x, y, color = "green")
# plt.pause(0.01)
     
sys.exit(plt.show())

输出:

简单的散点图

动画散点图代码:

from matplotlib import pyplot as plt
import random
import sys
 
x = []
y = []
 
plt.xlabel("X-axis")
plt.ylabel("Y-plot")
plt.title("Simple x-y plot")
for i in range(0, 50):
    x.append(random.randint(0, 100))
    y.append(random.randint(0, 100))
    plt.scatter(x, y, color = "green")
    plt.pause(0.01)
     
sys.exit(plt.show())

输出:

解释:

  1. 首先,导入库。
  2. 然后我们声明两个空列表 x 和 y。
  3. 然后运行 ​​for 循环并使用random 模块的randint()方法用一些随机整数填充列表。记住在循环中设置一个限制范围。
  4. 然后我们从模块中调用 scatter() 函数pyplot将绘图颜色设置为绿色。
  5. 最后一项非常重要。我们使用该plt.pause()函数将每个图的时间间隔设置为0.01秒。
  6. 最后使用 plt.show() 函数来显示绘图。

条形图动画代码

from matplotlib import pyplot as plt
import random
import sys
 
x = []
y = []
 
plt.xlabel("X-axis")
plt.ylabel("Y-plot")
plt.title("Simple bar plot")
for i in range(0, 50):
    x.append(random.randint(0, 100))
    y.append(random.randint(0, 100))
    plt.bar(x, y, color = "green")
    plt.pause(0.01)
     
sys.exit(plt.show())

输出:

解释:

  1. 所有过程与上图相同。
  2. 但我们调用该plt.bar()函数来绘制动画条形图。

使用matplotlib.animation模块

当我们继续前进时,主要焦点集中在内置动画类上。这样学习起来会更有趣。该子模块有几个元素: 有两个继承该类属性的子类。

  1. ArtistAnimation:使用艺术家属性来制作动画。
  2. FuncAnimation:遵循递归并连续调用函数来对图表/图进行动画处理。

为了使绘图更加精细,我们使用这些类。作为一个简单的例子,我们将看到使用相同概念的 sin(x) 函数的流程。

FuncAnimation 的语法

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

该类具有三个基本参数:

  1. func:更新屏幕上每一帧的函数。
  2. init_func:用于读取绘图数据的初始化程序。
  3. :更新屏幕上每秒每帧的性质。

代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
 
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro')
 
def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,
 
def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,
 
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

输出:

解释:

  1. 在第一行中,从 matplotlib 的动画类导入 FuncAnimation 函数。
  2. 然后为了子绘图创建两个对象Fig,axs
  3. 将两个空列表声明为xdata、ydata。
  4. 然后创建plt.plot()函数“ln”和“,”的实例请记住给出一个逗号,因为它将创建两个实例。
  5. 空实例帮助我们返回一系列艺术家对象。
  6. 创建一个init()函数。在该设置中,x_lim()0 到 360 度NumPy中,0 到 2*np.pi。这决定了我们的函数从一个点到另一个点的旋转。将 y_lim() 从 -1 设置为 1,最后返回 ln 和该空实例。
  7. 然后创建update()函数来更新屏幕上的每一帧它以框架作为参数。xdata列表中附加框架。ydata列表中附加np.sin(frame),它是正弦转换。
  8. 使用set_data()函数修复信息并插入两个列表 xdata 和 ydata。返回 ln 和空实例。
  9. 为 FuncAnimation() 类创建一个动画对象。这需要两个函数作为参数。
    1. 初始化函数:我们代码中的init() 。
    2. 更新:我们代码中的 update() 。
  10. 最后使用plt.show()方法显示图形。
  11. 我们有一个漂亮的 sin(x) 函数,它显示了它在轴上的流动。

实时绘图的应用

  1. 在股票市场上,投资者可以实时看到股票价格的上涨和下跌。
  2. 多专科医院都有心脏监护仪,可以通过动画情节显示患者的脉搏率。

结论

因此,通过这种方式,我们可以创建美丽的可视化效果。它们具有非常好的应用程序,并且在许多现实生活场景中都很有用。到这里,我们这个话题就结束了。