könnten Sie verwenden 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()
eine Oberfläche zeichnen mit plot_surface
Sie beginnen mit zwei 1-dimensionale Parameter zu identifizieren, u
und v
:
u = np.linspace(-1, 2, 60)
v = np.linspace(0, 2*np.pi, 60)
, so dass x
, y
, z
sind Funktionen der Parameter u
und v
:
x = x(u, v)
y = y(u, v)
z = z(u, v)
Die Sache zu bemerken, über ax.plot_surface
ist, dass seine ersten drei Argumente müssen 2D-Arrays sein. So verwenden wir np.meshgrid
zu erstellen, um Matrizen-Koordinate (U
und V
) aus Vektoren Koordinate (u
und v
) und definieren 2D-Arrays X
, Y
, Z
zu sein Funktionen U
und V
:
X = U
Y1 = (U**2 + 1)*np.cos(V)
Z1 = (U**2 + 1)*np.sin(V)
Für jeden Ort Auf den Koordinatenmatrizen U
und V
gibt es einen entsprechenden Wert für X
und Y
und Z
. Dies erzeugt eine Karte von 2-dimensional uv
-space zu 3-dimensionalen xyz
-space. Für jedes Rechteck in uv
-space gibt es ein Gesicht auf unserer Oberfläche in xyz
-space. Die von plot_surface
gezeichnete gekrümmte Oberfläche besteht aus diesen flachen Flächen.
Es sieht so aus, als wollten Sie, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Konsolenausgabe, Trace-Backs usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] und [fragen]. – idjaw