import matplotlib.pyplot as plt
import numpy as np
# 从 mpl_toolkits.mplot3d 中导入3D工具包 (添加 3D坐标轴 的显示)
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8, 6))
# 在figure上面添加 3D的 axis
# ax = Axes3D(fig) # 该行代码无法显示,可能原因是版本过低
# 使用以下语句添加axis 3D坐标轴
ax = fig.add_axes(Axes3D(fig))
# X, Y value
# X = np.arange(-4, 4, 0.25) (-4,4)之间均匀取值,步长0.25
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
# X, Y = np.meshgrid(X, Y) 将 x,y 平面网格化
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
# height value
Z = np.cos(R)
# ax.plot_surface 在3D图中作画
# rstride(row stride) 线的跨度 cstride(color stride) 颜色跨度
ax.plot_surface(X, Y, Z, edgecolor='black', rstride=1,
cstride=1, cmap=plt.get_cmap('rainbow'))
# zdir='z' 从z轴方向往 xOy平面 压下等高线 offset=-2 压到 z=-2的xOy平面
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap='rainbow')
# ax.set_zlim 设置z轴方向显示区域范围
ax.set_zlim(-2, 2)
plt.show()