aplicar mapa de color a mpl_toolkits.mplot3d.Axes3D.bar3d

Hay un argumento de “color” en la función bar3d de Axes3D que puede aceptar matrices para colorear barras individuales de diferentes colores, pero ¿cómo puedo aplicar un mapa de color (es decir, cmap = cm.jet) de la misma manera que una función plot_surface por ejemplo? Esto haría de una barra de cierta altura un color que refleje su altura.

http://matplotlib.sourceforge.net/examples/mplot3d/hist3d_demo.html

http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/api.html

Siguiendo la respuesta proporcionada por Ferguzz, aquí hay una solución más completa / actualizada:

import matplotlib.colors as colors import matplotlib.cm as cm dz = height_values offset = dz + np.abs(dz.min()) fracs = offset.astype(float)/offset.max() norm = colors.Normalize(fracs.min(), fracs.max()) color_values = cm.jet(norm(fracs.tolist())) ax.bar3d(xpos,ypos,zpos,1,1,dz, color=color_values) 

Por favor, preste atención a los siguientes puntos:

Aquí está mi solución:

 offset = dz + np.abs(dz.min()) fracs = offset.astype(float)/offset.max() norm = colors.normalize(fracs.min(), fracs.max()) colors = cm.jet(norm(fracs)) ax.bar3d(xpos,ypos,zpos,1,1,dz, color=colors) 

La primera línea solo es necesaria si sus datos se vuelven negativos.

Código adaptado desde aquí http://matplotlib.sourceforge.net/examples/pylab_examples/hist_colormapped.html .

Puede pasar una matriz de colores al argumento de facecolors, puede establecer un color para todos los parches en la superficie.

 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) colors = np.random.rand(40, 40, 4) surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors, linewidth=0, antialiased=False) ax.set_zlim(-1.01, 1.01) ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) plt.show() 

introduzca la descripción de la imagen aquí