Chciałbym wykreślić powierzchnię za pomocą mapy kolorów, modelu szkieletowego i konturów przy użyciu matplotlib
. Coś takiego:Kontur powierzchniowy i 3D w matplotlib
Zauważ, że ja nie pytam o konturach, które leżą w płaszczyźnie równoległej do xy ale te, które są 3D i białe w obrazie.
Jeśli pójdę w naiwny sposób i knuję te wszystkie rzeczy, nie widzę konturów (patrz kod i obrazek poniżej).
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()
Jeśli dodać przezroczystość do aspektów powierzchniowych potem widzę kontury, ale wygląda naprawdę bałagan (patrz kod i obrazek poniżej)
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1, alpha=0.5)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()
Pytanie: Czy istnieje sposób na uzyskanie tego wyniku w matplotlib
? Cieniowanie nie jest jednak konieczne.
Nie bardzo, to będzie wykreślić kontur 2D . Ale nie w 3D, tak jak ja chcę. Zobacz przykładowy obraz, ma białe kontury. – nicoguaro
Ach, przepraszam, źle zrozumiałem pytanie – tom