当我们听到数据可视化这个术语时,我们实际上会想到什么?暂时我们可以了解图形、线图、散点图等。但是,如果我们可以创建一些实时图呢?这些不是视频记录,它只是纯粹的编程和使用一些库。我们能够制作精美的图表、直方图、偏差等动画。
库和环境设置简介
我们要使用的库是:
集成开发环境环境:
- 视觉工作室代码
- 蟒蛇环境
- 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()) |
输出:
解释:
- 首先,导入库。
- 然后我们声明两个空列表 x 和 y。
- 然后运行 for 循环并使用
random
模块的randint()
方法用一些随机整数填充列表。记住在循环中设置一个限制范围。 - 然后我们从模块中调用 scatter() 函数
pyplot
。将绘图颜色设置为绿色。 - 最后一项非常重要。我们使用该
plt.pause()
函数将每个图的时间间隔设置为0.01秒。 - 最后使用 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()) |
输出:
解释:
- 所有过程与上图相同。
- 但我们调用该
plt.bar()
函数来绘制动画条形图。
使用matplotlib.animation模块
当我们继续前进时,主要焦点集中在内置动画类上。这样学习起来会更有趣。该子模块有几个元素: 有两个继承该类属性的子类。
- ArtistAnimation:使用艺术家属性来制作动画。
- FuncAnimation:遵循递归并连续调用函数来对图表/图进行动画处理。
为了使绘图更加精细,我们使用这些类。作为一个简单的例子,我们将看到使用相同概念的 sin(x) 函数的流程。
FuncAnimation 的语法
class FuncAnimation(fig, func, frames = None , init_func = None , fargs = None , save_count = None , * , cache_frame_data = True , * * kwargs) |
该类具有三个基本参数:
- func:更新屏幕上每一帧的函数。
- init_func:用于读取绘图数据的初始化程序。
- 帧:更新屏幕上每秒每帧的性质。
代码:
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() |
输出:
解释:
- 在第一行中,从 matplotlib 的动画类导入 FuncAnimation 函数。
- 然后为了子绘图创建两个对象Fig,axs。
- 将两个空列表声明为xdata、ydata。
- 然后创建plt.plot()函数“ln”和“,”的实例。请记住给出一个逗号,因为它将创建两个实例。
- 空实例帮助我们返回一系列艺术家对象。
- 创建一个init()函数。在该设置中,x_lim()从0 到 360 度。在NumPy中,0 到 2*np.pi。这决定了我们的函数从一个点到另一个点的旋转。将 y_lim() 从 -1 设置为 1,最后返回 ln 和该空实例。
- 然后创建update()函数来更新屏幕上的每一帧。它以框架作为参数。在xdata列表中附加框架。在ydata列表中附加np.sin(frame),它是正弦转换。
- 使用set_data()函数修复信息并插入两个列表 xdata 和 ydata。返回 ln 和空实例。
- 为 FuncAnimation() 类创建一个动画对象。这需要两个函数作为参数。
- 初始化函数:我们代码中的init() 。
- 更新:我们代码中的 update() 。
- 最后使用plt.show()方法显示图形。
- 我们有一个漂亮的 sin(x) 函数,它显示了它在轴上的流动。
实时绘图的应用
- 在股票市场上,投资者可以实时看到股票价格的上涨和下跌。
- 多专科医院都有心脏监护仪,可以通过动画情节显示患者的脉搏率。
结论
因此,通过这种方式,我们可以创建美丽的可视化效果。它们具有非常好的应用程序,并且在许多现实生活场景中都很有用。到这里,我们这个话题就结束了。