In case you want to show colormapped data with matplotlib and you use code similar to this one:
plt.scatter(xs, ys, c=vals, cmap='PuBu', s=20) plt.scatter(xs1, ys1, c='red', cmap=None, s=30) plt.colorbar()
you will get the following error.
Traceback (most recent call last): File "generate.py", line 46, in <module> plt.colorbar() File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/pyplot.py", line 1694, in colorbar ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/figure.py", line 1209, in colorbar cb = cbar.Colorbar(cax, mappable, **kw) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/colorbar.py", line 718, in __init__ mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/cm.py", line 282, in autoscale_None raise TypeError('You must first set_array for mappable') TypeError: You must first set_array for mappable
This is because the colorbar method draws the last colormap used, which is given as a None default argument to plt.scatter. Therefore, making the calls to plt.scatter in the order given in the example above overwrites the colorbar value internally at sets it to None, which gives the error mentioned above. Make sure that the last plt.anything function is called with an appropriate cmap argument just before you add the plt.colorbar.