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.])