您可以使用plot_surface
:
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
u = np.linspace(-1, 2, 60)
v = np.linspace(0, 2*np.pi, 60)
U, V = np.meshgrid(u, v)
X = U
Y1 = (U**2 + 1)*np.cos(V)
Z1 = (U**2 + 1)*np.sin(V)
Y2 = (U + 3)*np.cos(V)
Z2 = (U + 3)*np.sin(V)
ax.plot_surface(X, Y1, Z1, alpha=0.3, color='red', rstride=6, cstride=12)
ax.plot_surface(X, Y2, Z2, alpha=0.3, color='blue', rstride=6, cstride=12)
plt.show()
要使用plot_surface
您绘制表面,首先要确定两个一维参数,u
并v
:
u = np.linspace(-1, 2, 60)
v = np.linspace(0, 2*np.pi, 60)
使得x
,y
,z
是参数的功能u
和v
:
x = x(u, v)
y = y(u, v)
z = z(u, v)
需要注意的ax.plot_surface
是,它的前三个参数必须是2D数组。因此我们使用np.meshgrid
来创建坐标矩阵(U
和V
)总分坐标向量(u
和v
),并定义二维数组X
,Y
,Z
为的功能U
和V
:
X = U
Y1 = (U**2 + 1)*np.cos(V)
Z1 = (U**2 + 1)*np.sin(V)
有关坐标矩阵的每个位置U
和V
,对于一个对应的值X
和Y
与Z
。这将创建一个从2维uv
空间到3维xyz
空间的映射。对于uv
-space中的每个矩形,-space中的表面都有一个面xyz
。绘制的曲面plot_surface
由这些平面组成。