def plot3D(X, Y, Z):
fig = plt.figure()<EOL>ax = Axes3D(fig)<EOL>light = LightSource(<NUM_LIT>, <NUM_LIT>)<EOL>illuminated_surface = light.shade(Z, cmap=cm.coolwarm)  <EOL>Xmin = np.amin(X)<EOL>Xmax = np.amax(X)<EOL>Ymin = np.amin(Y)<EOL>Ymax = np.amax(Y)<EOL>Zmin = np.amin(Z)<EOL>Zmax = np.amax(Z)<EOL>ax.contourf(X, Y, Z, zdir='<STR_LIT:x>', offset=Xmin - <NUM_LIT:0.1> * (Xmax - Xmin), cmap=cm.coolwarm, alpha=<NUM_LIT:1>)  <EOL>ax.contourf(X, Y, Z, zdir='<STR_LIT:y>', offset=Ymax + <NUM_LIT:0.1> * (Ymax - Ymin), cmap=cm.coolwarm, alpha=<NUM_LIT:1>)  <EOL>ax.contourf(X, Y, Z, zdir='<STR_LIT:z>', offset=Zmin - <NUM_LIT:0.1> * (Zmax - Zmin), cmap=cm.coolwarm, alpha=<NUM_LIT:1>)  <EOL>ax.plot_surface(X, Y, Z, cstride=<NUM_LIT:5>, rstride=<NUM_LIT:5>, facecolors=illuminated_surface, alpha=<NUM_LIT:0.5>)<EOL>plt.show()<EOL>
Surface plot.

Generate X and Y using, for example
      X,Y = np.mgrid[0:1:50j, 0:1:50j]
    or
      X,Y= np.meshgrid([0,1,2],[1,2,3]).

:param X: 2D-Array of x-coordinates
:param Y: 2D-Array of y-coordinates
:param Z: 2D-Array of z-coordinates