python - pcolormesh - Colorbar para el comando matplotlib plot_surface
imshow colorbar (1)
He modificado el código de ejemplo de mplot3d para mi aplicación con la ayuda de Paul. El código dice:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection=''3d'')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
z1 = z * np.cos(0.5*x)
N = z1 / z1.max() # normalize 0..1
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=cm.jet(N), linewidth=0, antialiased=False, shade=False)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
El código funciona muy bien para trazar la superficie. Pero cuando trato de agregar una barra de color al diagrama anterior, aparece el siguiente error:
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
File "C:/Python26/lib/site-packages/spyderlib/widgets/externalshell/startup.py", line 122, in runfile
execfile(filename, glbs)
File "C:/Documents and Settings/mramacha/My Documents/Python/Candela/test.py", line 22, in <module>
fig.colorbar(surf, shrink=0.5, aspect=5)
File "C:/Python26/lib/site-packages/matplotlib/figure.py", line 1104, in colorbar
cb = cbar.Colorbar(cax, mappable, **kw)
File "C:/Python26/lib/site-packages/matplotlib/colorbar.py", line 706, in __init__
mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax
File "C:/Python26/lib/site-packages/matplotlib/cm.py", line 261, in autoscale_None
raise TypeError(''You must first set_array for mappable'')
TypeError: You must first set_array for mappable
Estaría muy agradecido si alguien puede guiarme con esto.
Prabhu
Puede usar un objeto asignable proxy ya que su matriz de superficie no está asignada. El mappable simplemente convierte los valores de cualquier matriz en colores RGB definidos por un mapa de colores.
En tu caso, quieres hacer esto con la matriz z1:
import matplotlib.cm as cm
m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(z1)
plt.colorbar(m)