4 个用于 3D 可视化和图形的 Python 库

可视化是解决问题、数据分析甚至机器学习等新兴技术的最重要方面。只有当你理解某件事并在脑海中描绘出它的形象时,你才能继续推进任务并让其他人理解问题吗?

我们经常处理需要引人注目的图像或视觉数据来更好地解释它或增强体验的问题。可视化是将信息以视觉方式(以图像或视频的形式)显示出来的过程,使人脑能够轻松地感知视觉数据并在 13 毫秒内以视觉方式处理数据,从而理解数据。一些研究人员还声称,人类处理视觉数据的能力比文本数据多 60000 倍。一个好的可视化工具可以使工作变得更轻松,并将数据转换为传达给人们。

有许多可视化工具可以根据用例将数据转换为视觉效果。我们有条形图、饼图、折线图、直方图、树形图、热图等等,每种都有它的用途和特点。

我们也可以用Python实现可视化!有一些 Python 库具有内置方法来执行可视化任务。这些库包括 matplotlib、seaborn、GGplot 等等。这些库广泛用于可视化数据,是数据科学家、数据分析师和机器学习工程师最受欢迎的库。

可视化本身就很棒。但如果我们将这种可视化变为现实呢?如果我们可以与可视化交互怎么办?我说的是数据的 3D 可视化。可以用Python实现3D可视化吗?

3D 可视化或多或少就像将数据变为现实。3D 通常代表 3 Dimension,使用三个维度来绘制数据。我们之前讨论的可视化工具(折线图、直方图、条形图)利用了二维,感觉就像我们只是在看一张图像或图片。但当第三维度投入使用时,魔法就发生了,我们感觉数据好像有了生命。

Python 还有一些支持 3D 绘图的库,几分钟后,我们将一一了解其中的一些。

最流行的 3D 可视化库是 matplotlib。还有其他库,如 Plotly、Mayavi、Pyvista、PyopenGL 等。matplotlib 与其他库的主要区别在于,matplotlib 生成静态 3D 可视化,但与其他库相比,我们可以与视觉对象进行交互。

我们将看到它们的安装以及一些如何使用它们的示例。

使用 Matplotlib 进行 3D 可视化

Matplotlib 是最流行的 Python 库之一。它用于各种可视化工具,如线图、条形图、直方图、散点图等。这些是该库提供的一些 2D 绘图。Matplotlib 基于 numpy 数组构建,可以可视化数组、数据框等。说到 3D 绘图,我们有不同类型的曲面图、轮廓图、线框图、3D 直方图、颤动图、茎图等。虽然 matplotlib 主要创建静态 3D 对象,但我们可以将其与其他软件集成并生成交互式 3D 绘图。

阅读本文以开始使用 matplotlib。

您需要做的就是安装该库并将其导入您的环境或脚本中以使用它。

要安装该库,请打开终端/命令提示符并运行以下命令。

pip install matplotlib

现在您已经安装了库,使用以下命令导入它。

import matplotlib.pyplot as plt

伟大的!现在,根据您的数据,您可以使用任何绘图。我们将看到 3D 曲面图和直方图的简单示例,所以让我们开始吧!

3D直方图

直方图是用范围绘制的用户数据的图形表示。直方图经常与条形图混淆,直方图具有单独的条形图,而条形图具有链接的条形图。

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
x3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y3 = [1,4,9,16,25,36,49,64,81,100]
z3 = np.zeros(10)
dx = np.ones(10)
dy = np.ones(10)
dz = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ax.bar3d(x3,y3,z3, dx, dy, dz, zsort='average')
plt.show()

我们正在导入 matplotlib 库和 numpy 库。图对象是在第三行创建的。轴对象是使用 subplot 方法和 3d 投影创建的。我们定义数据点 x3(对于 X 轴)和 y3(对于 Y 轴)。z3 是第三个维度,它占据图形的底部。dx、dy 和 dz 给出轴的尺寸。bar3d 方法用于绘制直方图。zsort用于正确排列条形

3d 直方图 Matplotlib

3D 曲面图

3D曲面图主要用于表示2D空间中3维物体之间的关系。x 轴和 y 轴表示输入数据,新轴 z 表示输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 号
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
import numpy as np
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter('{x:.02f}')
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

在第一行中,我们导入 matplotlib 库。接下来,我们从库中导入颜色图模块。库的 LinearLocator 用于为绘图提供刻度。

numpy 库用于生成数据。我们使用 3d 投影创建对象图(fig)和轴(ax)。

X 和 Y 值由 -5 到 5 之间的随机值组成,相差 0.25。这些值用于创建网格。R 变量存储 X 和 Y 值的平方根。

我们正在使用 ax.plot_surface 创建一个表面图,一个冷色、暖色图。该图存储在 surf.txt 中。

Z 是存储 R 的 sin 值的新轴。颜色条用于提供有关颜色图的详细信息。

show 方法用于显示绘图。

3D 曲面图 Matplotlib

使用 Plotly 进行 3D 可视化

Plotly 是一个交互式开源绘图库,支持 40 多种独特的图表类型,涵盖广泛的统计、金融、地理、科学和 3 维用例。Plotly 库因其交互能力而主要用于统计和数据科学。它专为使用 Python 和 R 进行可视化而设计,并使用 JavaScript 编写。Plotly 还支持动画,所以如果您想要制作动画,plotly 就是您的最佳选择!

请参阅本文以学习在地理地图上绘制地理数据。

以下是安装 Plotly 的方法。

pip install plotly
(or)
pip install plotly==5.14.1

让我们看看如何使用plotly 创建交互式曲面图。

import plotly.graph_objects as go
import numpy as np
x, y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))
z = np.sin(np.sqrt(x**2 + y**2))
 
fig = go.Figure(data=go.Surface(x=x, y=y, z=z, colorscale='Viridis')) 
 
fig.update_layout(
    title='Surface Plot',
    scene=dict(
        xaxis=dict(title='X'),
        yaxis=dict(title='Y'),
        zaxis=dict(title='Z')
    )
)
fig.show()

Plotly 库graph_objects是作为 go 导入的。numpy 库用于生成数据。

x 和 y 变量包含 100 个介于 -5 和 5 之间的 x 和 y 坐标值。z 变量由 x 和 y 值的平方根的 sin 组成。

图形对象使用颜色图 -Viridis 初始化曲面图。您可以使用 magma、Jet、RdBu、Hot 和其他颜色图。设置图形对象的布局并给出标题。最后通过show方法将图形显示在屏幕上。

这是一个演示视频,展示了如何通过单击并拖动鼠标来与 3D 对象进行交互,以获得不同的视图并最大化/最小化对象。

情节互动

您可以从参考文献中链接的绘图文档中尝试其他 3D 可视化工具。

使用 Mayavi 进行 3D 可视化

Mayavi 是另一个强大的可视化库,它依赖于一个名为 VTK 的包和一个名为 PyQt5 的用户界面工具。因此,在安装 mayavi 库的同时,我们甚至还需要安装依赖项。Mayavi 是一款功能强大的可视化工具,提供高级 API 来生成大量数据的 3D 可视化。它是用 Python 编写的,支持计算网格以及标量、向量和张量数据的可视化。它有许多等值线图、曲面图和更多 3D 可视化工具。还支持动画。

看一下mayavi的安装。

pip install mayavi
pip install PyQt5

通常,您不需要安装 VTK 轮,但有时,尤其是在使用 Jupyter Notebook 时,您可能需要安装它。

pip install vtk

让我们看看如何使用 mayavi 创建 3D 等高线图。

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
from mayavi import mlab
x, y, z = np.mgrid[-5:5:50j, -5:5:50j, -5:5:50j]
scalar = np.sin(np.sqrt(x**2 + y**2 + z**2))
fig = mlab.figure()
contour = mlab.contour3d(x, y, z, scalar, colormap='magma')
mlab.xlabel('X')
mlab.ylabel('Y')
mlab.zlabel('Z')
mlab.title('3D Contour Plot')
mlab.show()

我们从mayavi库导入numpy库和mlab模块来进行可视化。

x、y 和 z 变量用于定义网格的坐标。它产生 -5 到 5 之间的 50 个值。我们应该创建的轮廓应该包含一个标量值,因此我们定义一个包含 x、y 和 z 值的平方根的 sin 的标度。设置图形对象以创建由等高线图组成的图形。我们正在创建一个名为contour 的变量,用于存储由该方法创建的等高线图contour3d绘图的标签和标题设置在接下来的四行中。

最后,我们使用 show 方法显示该图。

此代码需要几分钟才能运行,因为 mayavi 库是一个功能强大的库,并且可能需要几分钟来处理代码。另外,如果您使用 Google Colaboratory,此代码可能会占用所有处理单元。建议使用Jupyter Notebook。成功运行后,您将在任务栏上看到一个场景框。该场景框有几个按钮用于查看 3D 对象并与之交互。

与 Mayavi 等值线图的交互

使用 PyVista 进行 3D 可视化

pyvista 是另一个基于可视化工具包(VTK)构建的模块。它主要提供 3D 网格图以及其他 3D 图,例如点云、地图、样条曲线和体积数据。它还允许对网格进行布尔运算。

您可以使用以下命令安装 pyvista 库。

pip install pyvista

我们将了解如何使用 pyvista 绘制样条线。样条曲线是一条多项式曲线,其运动由一组控制点确定。它主要用于计算机辅助设计(CAD)、数值和统计分析。

1
2
3
4
5
6
7
8
9
10
import numpy as np
import pyvista  as pv
theta = np.linspace(-10 * np.pi, 10 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
points = np.column_stack((x, y, z))
spline = pv.Spline(points, 500).tube(radius=0.1)
spline.plot(scalars='arc_length', show_scalar_bar=True)

在前两行中,我们导入 numpy 库和 pyvista 库。我们正在初始化一个 theta 变量来存储 -10pi 到 10pi 之间的 100 个值。z 变量用于存储 -2 到 2 之间的 100 个值。r 是因变量,存储 z 的平方加 1 的值。x 变量存储 r 和 theta 的 sin 的乘积值,而 y 变量存储它的 cos。Points 变量以堆栈的形式存储 x、y 和 z 变量作为曲线的坐标。样条线是使用 0.1 的管半径创建的,并且有 500 个要插值的值。用于spline.plot绘制样条曲线及其标量条,arc_length用于根据曲线的弧度为曲线提供颜色。

与 Mayavi 一样,pyvista 也提供了一组与 3D 绘图交互的按钮。这是它的一个演示。

与 Pyvista 样条线交互

本教程中提供的示例只是您可以使用所讨论的这些库执行的众多操作中的一小部分。请按照文档示例来探索这些工具并创造奇迹。

结论

我们已经完成了本教程。我希望这份使用 Python 进行 3D 可视化的综合指南有用。我们在这里讨论的四个库是 matplotlib、Plottly、Mayavi 和 PyVista。

Matplotlib 基本上被部署来进行基本的绘图。因此,如果您想要一个静态但信息丰富的绘图,matplotlib 是您的最佳选择。

Plotly 是一个很棒的 3D 可视化工具。它提供许多 3D 绘图甚至地理地图来绘制地理或地理空间数据。

来到 Mayavi 和 PyVista,我们可以借助场景框、切换开关、按钮等与绘图进行交互。如果您想要动画或类似电影的可视化效果,您可以选择这些库。

当然,您可以通过下面提供的这些库的文档来探索这些库的更多工具。

参考

您可以在此处找到有关 Numpy 库的更多信息。

Matplotlib 3D。

阴谋。

玛亚维。

皮维斯塔。