使用 pcolormesh 绘制网格与着色

Beginner

This tutorial is from open-source community. Access the source code

简介

Matplotlib 是一个用于 Python 的数据可视化库。它提供了各种工具,可在 Python 中创建静态、动画和交互式可视化。在本实验中,我们将学习如何使用 Matplotlib 中的 pcolormeshpcolor 函数来可视化二维网格。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入所需库

首先,我们需要通过运行以下代码块来导入所需的库 Matplotlib 和 NumPy:

import matplotlib.pyplot as plt
import numpy as np

创建用于可视化的数据

接下来,我们将创建一个用于可视化的二维网格。我们可以使用 NumPy 中的 meshgrid 函数来创建网格。meshgrid 函数根据两个向量 xy 创建一个点的网格,这两个向量表示网格点的坐标。我们将使用以下代码块创建一个 5x5 点的网格:

nrows = 5
ncols = 5
x = np.arange(ncols + 1)
y = np.arange(nrows + 1)
X, Y = np.meshgrid(x, y)
Z = X + Y

平面着色

Matplotlib 中的 pcolormesh 函数可以可视化二维网格。假设最少的网格规范是 shading='flat',并且如果网格在每个维度上比数据大一个,即形状为 (M+1, N+1)。在这种情况下,XY 指定了用 Z 中的值进行着色的四边形的角。我们可以使用以下代码块来可视化该网格:

fig, ax = plt.subplots()
ax.pcolormesh(X, Y, Z, shading='flat', cmap='viridis')
ax.set_title('Flat Shading')
plt.show()

平面着色,形状相同的网格

如果网格在每个维度上与数据的形状相同,我们就不能使用 shading='flat'。从历史上看,在这种情况下 Matplotlib 会默默地丢弃 Z 的最后一行和最后一列,以匹配 Matlab 的行为。如果仍然需要这种行为,只需手动丢弃最后一行和最后一列。我们可以使用以下代码块来可视化该网格:

fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z[:-1, :-1], shading='flat', cmap='viridis')
ax.set_title('Flat Shading, Same Shape Grid')
plt.show()

最近点着色,形状相同的网格

通常情况下,当用户使 XYZ 具有相同形状时,他们并不是想丢弃一行和一列数据。对于这种情况,Matplotlib 允许使用 shading='nearest',并将着色的四边形以网格点为中心。如果传递了形状不正确的网格并使用 shading='nearest',则会引发错误。我们可以使用以下代码块来可视化该网格:

fig, ax = plt.subplots()
ax.pcolormesh(X, Y, Z, shading='nearest', cmap='viridis')
ax.set_title('Nearest Shading, Same Shape Grid')
plt.show()

自动着色

用户可能希望代码自动选择使用哪种方式,在这种情况下,shading='auto' 将根据 XYZ 的形状决定使用 flat 还是 nearest 着色。我们可以使用以下代码块来可视化该网格:

fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z, shading='auto', cmap='viridis')
ax.set_title('Auto Shading')
plt.show()

高洛德着色

也可以指定 高洛德着色,其中四边形内的颜色在网格点之间进行线性插值。XYZ 的形状必须相同。我们可以使用以下代码块来可视化该网格:

fig, ax = plt.subplots()
ax.pcolormesh(X, Y, Z, shading='gouraud', cmap='viridis')
ax.set_title('Gouraud Shading')
plt.show()

总结

在本实验中,我们学习了如何使用 Matplotlib 中的 pcolormeshpcolor 函数来可视化二维网格。我们了解了不同的着色选项,包括 flatnearestautogouraud。我们还学习了如何使用 NumPy 中的 meshgrid 函数创建二维网格。