Matplotlib Pcolor 可视化教程

Beginner

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

简介

本教程是关于在 Matplotlib 中使用 pcolor 的介绍。pcolor 可让你生成二维图像样式的绘图,我们将向你展示如何在 Matplotlib 中使用它。

虚拟机使用提示

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

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

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

简单的 pcolor 演示

第一步是创建一个简单的 pcolor 演示。这将向你展示如何创建一个基本的 pcolor 绘图。

Z = np.random.rand(6, 10)

fig, (ax0, ax1) = plt.subplots(2, 1)

c = ax0.pcolor(Z)
ax0.set_title('默认:无边缘')

c = ax1.pcolor(Z, edgecolors='k', linewidths=4)
ax1.set_title('粗边缘')

fig.tight_layout()
plt.show()

将 pcolor 与类似函数进行比较

第二步是将 pcolor 与类似函数进行比较,例如 pcolormesh、imshow 和 pcolorfast。这将帮助你理解这些函数之间的差异以及何时使用它们。

## 缩小这些值以提高分辨率
dx, dy = 0.15, 0.05

## 为 x 和 y 边界生成 2 个二维网格
y, x = np.mgrid[-3:3+dy:dy, -3:3+dx:dx]
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
## x 和 y 是边界,因此 z 应该是这些边界内的值。
## 因此,从 z 数组中删除最后一个值。
z = z[:-1, :-1]
z_min, z_max = -abs(z).max(), abs(z).max()

fig, axs = plt.subplots(2, 2)

ax = axs[0, 0]
c = ax.pcolor(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max)
ax.set_title('pcolor')
fig.colorbar(c, ax=ax)

ax = axs[0, 1]
c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max)
ax.set_title('pcolormesh')
fig.colorbar(c, ax=ax)

ax = axs[1, 0]
c = ax.imshow(z, cmap='RdBu', vmin=z_min, vmax=z_max,
              extent=[x.min(), x.max(), y.min(), y.max()],
              interpolation='nearest', origin='lower', aspect='auto')
ax.set_title('图像(最近邻,aspect="auto")')
fig.colorbar(c, ax=ax)

ax = axs[1, 1]
c = ax.pcolorfast(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max)
ax.set_title('pcolorfast')
fig.colorbar(c, ax=ax)

fig.tight_layout()
plt.show()

带对数刻度的 pcolor

第三步是创建一个带对数刻度的 pcolor 绘图。当你有取值范围很广的数据时,这很有用。

N = 100
X, Y = np.meshgrid(np.linspace(-3, 3, N), np.linspace(-2, 2, N))

## 一个有尖峰突出的低隆起。
## 需要在对数刻度上设置 z/颜色轴,这样我们就能同时看到隆起和尖峰。
## 线性刻度只会显示尖峰。
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X * 10)**2 - (Y * 10)**2)
Z = Z1 + 50 * Z2

fig, (ax0, ax1) = plt.subplots(2, 1)

c = ax0.pcolor(X, Y, Z, shading='auto',
               norm=LogNorm(vmin=Z.min(), vmax=Z.max()), cmap='PuBu_r')
fig.colorbar(c, ax=ax0)

c = ax1.pcolor(X, Y, Z, cmap='PuBu_r', shading='auto')
fig.colorbar(c, ax=ax1)

plt.show()

总结

本教程向你展示了如何在 Matplotlib 中使用 pcolor。我们从一个简单的 pcolor 演示开始,然后将 pcolor 与 pcolormesh 和 imshow 等类似函数进行了比较。最后,我们创建了一个带对数刻度的 pcolor 绘图。