From: Michael H. <mh...@us...> - 2008-12-30 17:56:02
|
I am posting yet another question about colormaps, as I am having trouble grasping the fundamentals of the way the color model works in Matplotlib. There are many examples on-line of very nice looking continuous color images, such as the one that would be produced by using this code: /delta = 0.005 extent = (-3,4,-4,3) x = arange(-3.0, 4.001, delta) y = arange(-4.0, 3.001, delta) X, Y = meshgrid(x, y) Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1) Z = (Z1 - Z2) * 10 #normalize the example Z data to be between 0 and 10 Z = ((Z - Z.min())/(Z.max() - Z.min()))*10 jet() imshow(Z) show() /However, I can't find any similar examples for custom colormaps. Below is some test code I wrote to try to understand this. In it I have hard-coded a color dictionary (suitable for use with a LinearSegmentedColormap), a color list (suitable for use with a ListedColormap), and an array of Z values (appropriate for a Boundary norm). I have tried various combinations of Listed and LinearSegmented colormaps, and they either show patches of very discrete colors, or no colors, or the resulting image blows up when I call savefig(). My goal here is to display the Z data in a continuous colormap where the values are interpolated according to either the color dictionary or color list I have defined. A final side question: Does a tutorial on the matplotlib color model exist anywhere? This would be a really useful resource for me, and perhaps for others. Code is appended below. Thanks, Mike #!/usr/bin/env python ''' Trying to figure out how to make a smooth continuous image with my custom colormap ''' from pylab import * from matplotlib.colors import ListedColormap,LinearSegmentedColormap,Normalize,BoundaryNorm isListed = True delta = 0.005 extent = (-3,4,-4,3) x = arange(-3.0, 4.001, delta) y = arange(-4.0, 3.001, delta) X, Y = meshgrid(x, y) Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1) Z = (Z1 - Z2) * 10 #normalize the example Z data to be between 0 and 10 (to match my colormap data) Z = ((Z - Z.min())/(Z.max() - Z.min()))*10 cdict = {'blue': [1.0, 1.0, 1.0, 1.0, 1.0, 0.57647058823529407, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'green': [1.0, 1.0, 0.80000000000000004, 0.90196078431372551, 1.0, 1.0, 1.0, 0.78431372549019607, 0.56862745098039214, 0.0, 0.0, 0.0], 'red': [1.0, 1.0, 0.74901960784313726, 0.62745098039215685, 0.50196078431372548, 0.47843137254901963, 1.0, 1.0, 1.0, 1.0, 0.78431372549019607, 0.50196078431372548]} clist = array([[ 1. , 1. , 1. ], [ 1. , 1. , 1. ], [ 0.74901961, 0.8 , 1. ], [ 0.62745098, 0.90196078, 1. ], [ 0.50196078, 1. , 1. ], [ 0.47843137, 1. , 0.57647059], [ 1. , 1. , 0. ], [ 1. , 0.78431373, 0. ], [ 1. , 0.56862745, 0. ], [ 1. , 0. , 0. ], [ 0.78431373, 0. , 0. ], [ 0.50196078, 0. , 0. ]]) boundaries = array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 13.]) |