简介
本实验演示了如何使用 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 在三维表面图中使用自定义山体阴影。通过自定义山体阴影,我们能够创建一个更具视觉吸引力且信息丰富的图表。