创建自定义三维等高线图

Beginner

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

简介

在本实验中,你将学习如何使用 Python 中的 Matplotlib 库创建一个三角形的 3D 填充等高线图。该图将使用非结构化三角形网格和自定义三角剖分来创建。你将能够控制图的视角和颜色映射。

虚拟机提示

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

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

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

导入库

第一步是导入必要的库。在这种情况下,我们将需要 Matplotlib、Numpy 和 Matplotlib Tri。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as tri

创建坐标

接下来,我们将创建点的 x、y、z 坐标。我们将在极坐标中创建网格并计算 x、y、z。

n_angles = 48
n_radii = 8
min_radius = 0.25

radii = np.linspace(min_radius, 0.95, n_radii)
angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
angles[:, 1::2] += np.pi/n_angles

x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
z = (np.cos(radii)*np.cos(3*angles)).flatten()

创建自定义三角剖分

在这一步中,我们将创建一个自定义三角剖分,并屏蔽掉不需要的三角形。

triang = tri.Triangulation(x, y)
triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
                         y[triang.triangles].mean(axis=1))
                < min_radius)

创建绘图

现在,我们将使用 tricontourf() 函数创建绘图并自定义视角。

ax = plt.figure().add_subplot(projection='3d')
ax.tricontourf(triang, z, cmap=plt.cm.CMRmap)
ax.view_init(elev=45.)

plt.show()

总结

在本实验中,你学习了如何使用 Python 中的 Matplotlib 创建一个三角形三维填充等高线图。你学习了如何创建坐标、创建自定义三角剖分,以及如何自定义绘图的视角和颜色映射。