Rom*_*man 4 python numpy matplotlib sympy
R(teta,phi)= cos(phi ^ 2),teta [0,2*pi],phi [0,pi]
如何在matplotlib的帮助下绘制这个函数(R(teta,phi))在球坐标系中的图形?文档我还没有找到球面坐标.
下面的代码非常类似于Matplotlib画廊的3D极坐标图.唯一的区别是你np.meshgrid用来制作2D数组PHI而THETA 不是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()
Run Code Online (Sandbox Code Playgroud)
产量
通常R,半径应为正,因此您可能需要
R = np.abs(np.cos(PHI**2))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,
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)
Run Code Online (Sandbox Code Playgroud)
产量
谁知道R = np.abs(np.cos(PHI**2))穿裙子的小女孩?:)