Superficie y contorno 3d en matplotlib.

Me gustaría trazar una superficie con un mapa de colores, estructura de alambre y contornos utilizando matplotlib . Algo como esto:

introduzca la descripción de la imagen aquí

Tenga en cuenta que no estoy preguntando sobre los contornos que se encuentran en el plano paralelo a xy, sino los que están en 3D y blanco en la imagen.

Si voy por el camino ingenuo y grafico todas estas cosas, no puedo ver los contornos (vea el código y la imagen a continuación).

 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() 

introduzca la descripción de la imagen aquí

    Si agrego transparencia a las facetas de la superficie, puedo ver los contornos, pero se ve muy desordenado (vea el código y la imagen a continuación)

     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() 

    introduzca la descripción de la imagen aquí

    Pregunta: ¿Hay alguna manera de obtener este resultado en matplotlib ? Sin embargo, el sombreado no es necesario.

    Aparentemente es un error, si intentas esto

     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, rstride=1, cstride=1) ax.contour(X, Y, Z+1, 10, lw=3, colors="k", linestyles="solid") plt.show() 

    Y girando alrededor, verás que las líneas de contorno desaparecen cuando no deberían

    Creo que quieres ajustar el desplazamiento al contorno:

     ax.contour(X, Y, Z, 10, offset=-1, lw=3, colors="k", linestyles="solid", alpha=0.5) 

    Vea este ejemplo para más:

    http://matplotlib.org/examples/mplot3d/contour3d_demo3.html

    Y los documentos aquí:

    http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#contour-plots

    desplazamiento: si se especifica, trace una proyección de las líneas de contorno en esta posición en el plano normal a zdir

    Tenga en cuenta, zdir = 'z' por defecto, pero puede proyectar en la dirección x o y configurando el zdir consecuencia.