三维表面图中的自定义山体阴影

Beginner

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

简介

本实验演示了如何使用 Python 的 Matplotlib 在三维表面图中使用自定义山体阴影。山体阴影是利用光影来增强三维图中深度和地形起伏的视觉效果。通过自定义山体阴影,我们可以创建一个更具视觉吸引力和信息丰富的图表。

虚拟机使用提示

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

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

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

加载和格式化数据

在这一步中,我们将加载并格式化用于三维表面图的数据。我们将使用一个名为“jacksboro_fault_dem.npz”的示例数据集。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cbook, cm
from matplotlib.colors import LightSource

## 加载和格式化数据
dem = cbook.get_sample_data('jacksboro_fault_dem.npz')
z = dem['elevation']
nrows, ncols = z.shape
x = np.linspace(dem['xmin'], dem['xmax'], ncols)
y = np.linspace(dem['ymin'], dem['ymax'], nrows)
x, y = np.meshgrid(x, y)

region = np.s_[5:50, 5:50]
x, y, z = x[region], y[region], z[region]

设置绘图

在这一步中,我们将为三维表面图设置绘图。我们将使用一个光源(LightSource)对象来自定义山体阴影。

## 设置绘图
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))

ls = LightSource(270, 45)
## 要使用自定义山体阴影模式,请覆盖内置的阴影设置,并传入从“shade”计算出的阴影表面的 rgb 颜色。
rgb = ls.shade(z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=rgb,
                       linewidth=0, antialiased=False, shade=False)

plt.show()

自定义山体阴影

在这一步中,我们将通过覆盖内置的阴影设置并传入从“shade”计算出的阴影表面的 RGB 颜色来自定义山体阴影。

## 设置绘图
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))

ls = LightSource(270, 45)
## 要使用自定义山体阴影模式,请覆盖内置的阴影设置,并传入从“shade”计算出的阴影表面的 rgb 颜色。
rgb = ls.shade(z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=rgb,
                       linewidth=0, antialiased=False, shade=False)

plt.show()

检查与修订

检查代码并进行必要的修订。确保代码准确无误且注释完善。

总结

在本次实验中,我们学习了如何使用 Python 的 Matplotlib 在三维表面图中使用自定义山体阴影。通过自定义山体阴影,我们能够创建一个更具视觉吸引力且信息丰富的图表。