Colorbar for matplotlib plot_surface command
我已经在Paul的帮助下为我的应用程序修改了mplot3d示例代码。代码显示为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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() |
该代码非常适合绘制表面。但是,当我尝试向上面的图中添加颜色条时,出现以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
如果有人能够指导我,我将非常感激。
Prabhu
由于未映射表面数组,因此可以使用代理可映射对象。 mappable只是将任何数组的值转换为由颜色图定义的RGB颜色。
您要使用z1数组进行此操作:
1 2 3 4 | import matplotlib.cm as cm m = cm.ScalarMappable(cmap=cm.jet) m.set_array(z1) plt.colorbar(m) |