Matplotlib: imshow en 3d plot

En la ttwig siguiente, tomada de la galería de matplotlib, contourf se utiliza para crear una ttwig 2d debajo de la 3d. Mi pregunta es, ¿es posible usar imshow para hacer lo mismo? Me gustaría que los colores en la ttwig 2d fueran más suaves.

Hacer la ttwig 2d parece ser posible porque Contourf acepta un argumento zdir, mientras que he mirado y ahora no lo veo. Eso sugiere que no es posible, pero ¿por qué no? pcolor también haría el trabajo, ¿es posible con eso?

Simplemente especifique los niveles = opción para la configuración de nivel, por ejemplo

from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt,numpy as np plt.clf() fig = plt.figure(1) ax = fig.gca(projection='3d') X, Y, Z = axes3d.get_test_data(0.05) ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3) cset = ax.contourf(X, Y, Z, zdir='z', offset=-100, levels=np.linspace(-100,100,1200),cmap=plt.cm.jet) cset = ax.contourf(X, Y, Z, zdir='x', offset=-40, cmap=plt.cm.jet) cset = ax.contourf(X, Y, Z, zdir='y', offset=40, cmap=plt.cm.jet) ax.set_xlabel('X') ax.set_xlim(-40, 40) ax.set_ylabel('Y') ax.set_ylim(-40, 40) ax.set_zlabel('Z') ax.set_zlim(-100, 100) plt.show() 

La imagen

Un poco más de código que la respuesta de sega_sai, pero más rápido y, según mi experiencia, mucho mejor para superficies más complejas.

Use plot_surface para trazar una superficie plana donde lo desee y los colores para colorearla con los valores que desee

Es posible que necesite hacer que sus datos sean más suaves con el zoom de scipy

 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt,numpy as np plt.clf() fig = plt.figure(1) ax = fig.gca(projection='3d') X, Y, Z = axes3d.get_test_data(0.05) ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3) cset = ax.contourf(X, Y, Z, zdir='x', offset=-40, cmap=plt.cm.jet) cset = ax.contourf(X, Y, Z, zdir='y', offset=40, cmap=plt.cm.jet) ### strating here: # normalize Z to [0..1] Z=ZZ.min() Z=Z/Z.max() #use zoom to make your data smoother from scipy.ndimage.interpolation import zoom #make data 5 times smoother X=zoom(X,5) Y=zoom(Y,5) Z=zoom(Z,5) #draw a surface at -100, using the facecolors command to color it with the values of Z cset = ax.plot_surface(X, Y, np.zeros_like(Z)-100,facecolors=plt.cm.jet(Z),shade=False) ax.set_xlabel('X') ax.set_xlim(-40, 40) ax.set_ylabel('Y') ax.set_ylim(-40, 40) ax.set_zlabel('Z') ax.set_zlim(-100, 100) plt.show() 

imagen lista

Esto también hace que sea un poco más difícil crear una barra de color, para eso:

 cb = plt.cm.ScalarMappable(cmap=plt.cm.jet) cb.set_array(Z) plt.colorbar(cb) plt.show()