The matplotlib tutorial provides a nice example of how to draw a spherical suface:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
plt.show()
From what I understand, this creates a 2D grid for each x
, y
, and z
variable corresonding to the product of the parameters u
and v
. The calculated x
, y
, and z
variables are then the cartesian coordinates created from the spherical coordinates in u
and v
.
My question is the following: Why does the input to plot_surface
have to be in 2D arrays?
I suspect it has something to do with calculating the normals of each of the surface faces, but I can't seem to figure it out. Is there some detailed documentation that describes this?
This question seems to ask something similar, but the single answer isn't particularly enlightening.