Vorrei tracciare una superficie con una mappa colori, wireframe e contorni usando matplotlib
. Qualcosa di simile a questo:Superficie e contorno 3d in matplotlib
Si noti che non sto chiedendo circa i contorni che si trovano nel piano parallelo xy, ma quelli che sono 3D e bianche nell'immagine.
Se passo il modo ingenuo e tracciamo tutte queste cose non riesco a vedere i contorni (vedi codice e immagine sotto).
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()
Se un aggiungere trasparenza alle sfaccettature di superficie, allora posso vedere i contorni, ma sembra davvero ingombra (vedi codice e l'immagine di seguito)
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()
Domanda: C'è un modo per ottenere questo risultato in matplotlib
? L'ombreggiatura non è necessaria, però.
Non proprio, questo sarà tracciare il contorno in 2D . Ma non in 3D come li voglio. Vedi l'immagine di esempio, ha contorni bianchi. – nicoguaro
Ah ok, scusa ho frainteso la domanda – tom