Поверхность и 3d контур в матплотлибе
Я хотел бы построить поверхность с помощью карты цветов, каркаса и контуров, используяmatplotlib
, Что-то вроде этого:
Обратите внимание, что я спрашиваю не о контурах, лежащих в плоскости, параллельной xy, а о тех, которые3D и белый на изображении.
Если я пойду наивным путем и нарисую все эти вещи, я не смогу увидеть контуры (см. Код и изображение ниже).
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()
Если добавить прозрачность к поверхностным граням, то я могу видеть контуры, но это выглядит действительно загроможденным (см. Код и изображение ниже)
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()
Вопрос: Есть ли способ получить этот результат вmatplotlib
? Затенение не обязательно, однако.