Combinando el gráfico de dispersión con el gráfico de superficie

¿Cómo puedo combinar un diagtwig de dispersión 3D con un gráfico de superficie 3D mientras mantengo transparente el gráfico de superficie para que pueda ver todos los puntos?

Para combinar varios tipos de gráficos en el mismo gráfico, debe utilizar la función

plt.hold (Verdadero).

El siguiente código traza un gráfico de dispersión 3D con un gráfico de superficie 3D:

from mpl_toolkits.mplot3d import * import matplotlib.pyplot as plt import numpy as np from random import random, seed from matplotlib import cm fig = plt.figure() ax = fig.gca(projection='3d') # to work in 3d plt.hold(True) x_surf=np.arange(0, 1, 0.01) # generate a mesh y_surf=np.arange(0, 1, 0.01) x_surf, y_surf = np.meshgrid(x_surf, y_surf) z_surf = np.sqrt(x_surf+y_surf) # ex. function, which depends on x and y ax.plot_surface(x_surf, y_surf, z_surf, cmap=cm.hot); # plot a 3d surface plot n = 100 seed(0) # seed let us to have a reproducible set of random numbers x=[random() for i in range(n)] # generate n random points y=[random() for i in range(n)] z=[random() for i in range(n)] ax.scatter(x, y, z); # plot a 3d scatter plot ax.set_xlabel('x label') ax.set_ylabel('y label') ax.set_zlabel('z label') plt.show() 

resultado:

http://sofes.miximages.com/python/3d_scatter_surface_plt.gif

Puedes ver algunos otros ejemplos con gráficos 3d aquí:
http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html

He cambiado los colores de la gráfica de superficie del valor predeterminado a un mapa de colores “caliente” para distinguir los colores de las dos gráficas. Ahora, se ha visto que la gráfica de superficie anula la gráfica de dispersión, independientemente del orden

EDITAR: Para solucionar ese problema, se debe utilizar la transparencia en el mapa de colores de la plot de superficie; Agregando el código en: Mapa de color transparente y cambiando la línea:

 ax.plot_surface(x_surf, y_surf, z_surf, cmap=cm.hot); # plot a 3d surface plot 

a

 ax.plot_surface(x_surf, y_surf, z_surf, cmap=theCM); 

obtenemos:

http://sofes.miximages.com/python/3d_scatter_surface_plt_transparent.gif

Usando el ejemplo de siluaty; En lugar de utilizar la transparencia a través del comando cmap = theCM, puede ajustar el valor alfa. Esto te puede dar lo que quieres?

 ax.plot_surface(x_surf, y_surf, z_surf, cmap=cm.hot, alpha=0.2)