On 2012/07/26 9:20 PM, Jeffrey Spencer wrote:
> import numpy as np
> import matplotlib as mpl
> X, Y = np.meshgrid(arange(20),arange(20))
> Z = np.arange(20*20)
> Z = Z.reshape(20,20)
> logNorm = mpl.colors.Normalize(vmin=0,vmax=200)
> fig = mpl.pyplot.figure(10)
> ax = fig.add_subplot(111)
> surf = ax.contourf(X,Y,Z, 100, cmap=matplotlib.cm.jet, norm = logNorm)
> cbar = fig.colorbar(surf, shrink=0.70, norm=logNorm)
> show()


OK, the basic problem here is that you are specifying 100 levels, which 
are being auto-selected to cover the actual data range; and the colorbar 
is doing what it is supposed to do, which is show the levels you 
actually have.  Try leaving out the norm, and just specify the levels to 
cover what you want, more like this:

surf = ax.contourf(X, Y, Z, np.arange(0, 200.1, 2), cmap=mpl.cm.jet, 
extend='both')
cbar = fig.colorbar(surf, shrink=0.7)

If you actually do want a log norm, you can pass that in to contourf and 
it will be passed on to colorbar; but most likely you should still 
specify the levels you want as an array, and not specify vmin and vmax 
in the norm.  If you want log scaling, it may work better to simply plot 
the log of Z, and use the colorbar label to indicate that this is what 
you are doing.

Note that with a recent change, you can use the set_under and set_over 
methods of the cmap to specify arbitrary colors, or no color, for the 
extended regions; or you can leave out the "extend" kwarg and not color 
the regions outside the range of your contour levels.

In general, contourf is most appropriate when there is a moderate number 
of levels, well under 100; if you want that many gradations, then you 
might do better with pcolormesh or ax.pcolorfast or imshow.  For those 
image-like methods, it is appropriate to use vmin and vmax, either 
directly, or in a norm.

Eric

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to