Gráficos de dispersión 3d de Pylab con proyecciones 2D de datos trazados

Estoy tratando de crear un diagtwig de dispersión 3D simple, pero también quiero mostrar una proyección en 2D de estos datos en la misma figura. Esto permitiría mostrar una correlación entre dos de esas 3 variables que podrían ser difíciles de ver en una gráfica 3D.

Recuerdo haber visto esto en algún lugar antes, pero no pude encontrarlo de nuevo.

Aquí hay un ejemplo de juguete:

x= np.random.random(100) y= np.random.random(100) z= sin(x**2+y**2) fig= figure() ax= fig.add_subplot(111, projection= '3d') ax.scatter(x,y,z) 

Puede agregar proyecciones 2D de sus datos de dispersión 3D utilizando el método de plot y especificando zdir :

 import numpy as np import matplotlib.pyplot as plt x= np.random.random(100) y= np.random.random(100) z= np.sin(3*x**2+y**2) fig= plt.figure() ax= fig.add_subplot(111, projection= '3d') ax.scatter(x,y,z) ax.plot(x, z, 'r+', zdir='y', zs=1.5) ax.plot(y, z, 'g+', zdir='x', zs=-0.5) ax.plot(x, y, 'k+', zdir='z', zs=-1.5) ax.set_xlim([-0.5, 1.5]) ax.set_ylim([-0.5, 1.5]) ax.set_zlim([-1.5, 1.5]) plt.show() 

introduzca la descripción de la imagen aquí

La otra respuesta funciona con matplotlib 0.99, pero las versiones 1.0 y posteriores necesitan algo un poco diferente (este código se verificó con v1.3.1):

 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x= np.random.random(100) y= np.random.random(100) z= np.sin(3*x**2+y**2) fig= plt.figure() ax = Axes3D(fig) ax.scatter(x,y,z) ax.plot(x, z, 'r+', zdir='y', zs=1.5) ax.plot(y, z, 'g+', zdir='x', zs=-0.5) ax.plot(x, y, 'k+', zdir='z', zs=-1.5) ax.set_xlim([-0.5, 1.5]) ax.set_ylim([-0.5, 1.5]) ax.set_zlim([-1.5, 1.5]) plt.show() 

Puede ver qué versión de matplotlib tiene importándola e imprimiendo la cadena de versión:

 import matplotlib print matplotlib.__version__