Turns out, the problem wasn't with the Slider at all, I just needed to convert the value returned by the slider into an int.
Replacing with
l.set_data(A[int(idx)])
does the trick
Answer from usernumber on Stack OverflowI think your error in the 3D vs 2D surface colour is due to data normalisation in the surface colours. If you normalise the data passed to plot_surface facecolor with, facecolors=plt.cm.BrBG(data/data.max()) the results are closer to what you'd expect.
If you simply want a slice normal to a coordinate axis, instead of using imshow, you could use contourf, which is supported in 3D as of matplotlib 1.1.0,
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import cm
# create a 21 x 21 vertex mesh
xx, yy = np.meshgrid(np.linspace(0,1,21), np.linspace(0,1,21))
# create vertices for a rotated mesh (3D rotation matrix)
X = xx
Y = yy
Z = 10*np.ones(X.shape)
# create some dummy data (20 x 20) for the image
data = np.cos(xx) * np.cos(xx) + np.sin(yy) * np.sin(yy)
# create the figure
fig = plt.figure()
# show the reference image
ax1 = fig.add_subplot(121)
ax1.imshow(data, cmap=plt.cm.BrBG, interpolation='nearest', origin='lower', extent=[0,1,0,1])
# show the 3D rotated projection
ax2 = fig.add_subplot(122, projection='3d')
cset = ax2.contourf(X, Y, data, 100, zdir='z', offset=0.5, cmap=cm.BrBG)
ax2.set_zlim((0.,1.))
plt.colorbar(cset)
plt.show()
This code results in this image:

Although this won't work for a slice at an arbitrary position in 3D where the imshow solution is better.
Check out the plotImage function here. You can place the image anywhere and rotate however you need it. Also to not create huge surfaces, you can also downscale the image. Hope this helps!

This is ill-defined, since how would you see stuff that was not at the surface of the cube?
The Mayavi documentation has various approaches of ways to do what you want to do, including cut planes and voxel-specific alpha channels. See visualizing volumetric scalar data.
Suffice it to say this requires Mayavi and is rather beyond the scope of matplotlib's (handy, but limited) 3D features.
matplotlib cannot plot 3d image. you can use mayavi instead.

