当我们听到数据可视化这个词时,实际上我们想到的是什么?只是在一段时间内,我们可以得到一个图形、线图、散点图等的概念。但是,如果我们可以创建一些现场图。 这些不是视频记录,它只是纯粹的编程和使用一些库。我们能够制作漂亮的图表、直方图、偏差等的动画。
库和环境设置介绍
我们要使用的库是:
- Matplotlib
- Seaborn
- Numpy
集成开发环境的环境:
- Visual Studio Code
- Anaconda环境
- Python版本:3.9.7
Matplotlib的动画类
Matplotlib是一个非常著名的库,它使绘图变得相当容易。它是免费的、开源的,而且文档中提供了一个简单的入门指南。对于动画的目的,它提供了一个特殊的类,即。**"animation"。**这个类有几个函数可以满足我们在Python中为任何数据制作动画的要求。我们将看到如何用一个简单的代码来使用它。
可以查看官方文档:https://matplotlib.org/stable/api/animation_api.html。
一个简单的散点图与一个动画散点图的对比
简单散点图的代码:
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
模块中的scatter()函数。将绘图颜色设为绿色。 - 最后一个是非常重要的。我们使用
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)函数,显示其在轴上的流动。
实时图的应用
- 在股票市场上,投资者能够看到股票价格的实时增长和下降。
- 多专科医院有心脏监测器,使用动画图显示病人的脉搏。
结论
因此,通过这种方式,我们可以创建美丽的可视化。它们有非常好的应用,在许多现实生活的场景中都很有用。在这里,我们结束了这个话题。