方法
3D 图形需要的数据与等高线图基本相同:X、Y 数据决定坐标点,Z 轴数据决定 X、Y 坐标点对应的高度。与等高线图使用等高线来代表高度不同,3D 图形将会以更直观的形式来表示高度。
为了绘制 3D 图形,需要调用 Axes3D 对象的 plot_surface() 方法来完成
曲面
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(12, 8))
ax = Axes3D(fig)
delta = 0.125
# 生成代表X轴数据的列表
x = np.arange(-3.0, 3.0, delta)
# 生成代表Y轴数据的列表
y = np.arange(-2.0, 2.0, delta)
# 对x、y数据执行网格化
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
# 计算Z轴数据(高度数据)
Z = (Z1 - Z2) * 2
# 绘制3D图形
ax.plot_surface(X, Y, Z,
rstride=1, # rstride(row)指定行的跨度
cstride=1, # cstride(column)指定列的跨度
cmap=plt.get_cmap('rainbow')) # 设置颜色映射
# 设置Z轴范围
ax.set_zlim(-2, 2)
# 设置标题
plt.title("3D图")
plt.show()
上面程序开始准备了和前一个程序相同的数据,只是该程序将 delta 设置为 0.125,这样可以避免生成太多的数据点(在绘制 3D 图形时,计算开销较大,如果数据点太多, Matplotlib 将会很卡)。
程序中第 20 行代码调用 Axes3D 对象的 plot_surface() 方法来绘制 3D 图形,其中 X、Y 参数负责确定坐标点,Z 参数决定 X、Y 坐标点的高度数据。
圆柱体
# -*- coding: utf-8 -*-
#哪有什么可以直接登顶的人生,只有根据反馈不断迭代的过程!
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 简单方法画出漂亮的圆柱体(半径和高度均为1)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 生成圆柱数据,底面半径为r,高度为h。
# 先根据极坐标方式生成数据
u = np.linspace(0,2*np.pi,50) # 把圆分按角度为50等分
h = np.linspace(0,1,20) # 把高度1均分为20份
x = np.outer(np.sin(u),np.ones(len(h))) # x值重复20次
y = np.outer(np.cos(u),np.ones(len(h))) # y值重复20次
z = np.outer(np.ones(len(u)),h) # x,y 对应的高度
# Plot the surface
ax.plot_surface(x, y, z, cmap=plt.get_cmap('rainbow'))
plt.show()
圆台体
1、绘制上宽下窄的圆台
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits