下面的代码与 Matplotlib 库中的 3D polar plot 非常相似。唯一的区别是您使用np.meshgrid 为PHI 和THETA 制作2D 数组,而不是R 和THETA(或3D 极坐标图示例所称的P)。
故事的寓意是,只要X、Y和Z可以表示为两个参数的(平滑)函数,plot_surface就可以绘制它。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
theta, phi = np.linspace(0, 2 * np.pi, 40), np.linspace(0, np.pi, 40)
THETA, PHI = np.meshgrid(theta, phi)
R = np.cos(PHI**2)
X = R * np.sin(PHI) * np.cos(THETA)
Y = R * np.sin(PHI) * np.sin(THETA)
Z = R * np.cos(PHI)
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
plot = ax.plot_surface(
X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('jet'),
linewidth=0, antialiased=False, alpha=0.5)
plt.show()
产量
通常R,半径应该是正数,所以你可能想要
R = np.abs(np.cos(PHI**2))
在这种情况下,
import matplotlib.colors as mcolors
cmap = plt.get_cmap('jet')
norm = mcolors.Normalize(vmin=Z.min(), vmax=Z.max())
plot = ax.plot_surface(
X, Y, Z, rstride=1, cstride=1,
facecolors=cmap(norm(Z)),
linewidth=0, antialiased=False, alpha=0.5)
产量
谁知道R = np.abs(np.cos(PHI**2))是个穿裙子的小女孩? :)