#!/usr/bin/python
"""
http://www.workwithcolor.com/hsl-color-schemer-01.htm
::
cdict = {'red': ((),
()),
'green': ((),
()),
'blue': ((),
())}
white
FFFFFF 255,255,255
EBCCFF 235,204,255
D699FF 214,153,255
C266FF 194,102,255
AD33FF 173, 51,255
9900FF 153, 0,255
7A00CC 122, 0,204
5C0099 92, 0,153
3D0066 61, 0,102
1F0033 31, 0, 51
purple-black
000000 0, 0, 0
333300 51, 51, 0
666600 102,102, 0
999900 153,153, 0
CCCC00 204,204, 0
FFFF00 255,255, 0
FFFF33 255,255, 51
FFFF66 255,255,102
FFFF99 255,255,153
FFFFCC 255,255,204
white-yellow
"""
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
# Put the colors in lists...
colors1 = ['F4EBFF',
'DAB8FE',
'BC80FC',
'9739FB',
'6904D6',
'4A0395',
'2A0256',
'100120']
colors2 = ['1D1C01',
'393701',
'555202',
'716D02',
'8C8803',
'A8A303',
'C4BD04',
'DFD805',
'FAF318',
'FFFFFF']
# ... and make a list of the lists
color_lists = [colors1, colors2]
# Specify the ranges for all color lists except the last one - the last one
# is just 1 - sum(color_ranges)
color_ranges = [1]
last = 1. - sum(color_ranges)
color_ranges.append(last)
[docs]def hex_to_rgb(n) :
""" Convert a color in hex notation (e.g. FFFFFF) to a normalized RGB
tuple (in this example (1., 1., 1.)). """
# Split input string in three parts
r, g, b = [ n[2*i:2*i+2] for i in range(3) ]
rgb = []
# Convert to int and normalize
for i, c in enumerate([r, g, b]) :
c = int(c, base=16)
c /= 255.
rgb.append(c)
# Return the rgb tuple
return tuple(rgb)
# Main loop
red = []
blue = []
green = []
# Loop over color lists
for i, color_list in enumerate(color_lists) :
n_colors = len(color_list)
# For the Interpolation value to reach the maximum of 1.0 we need to
# make bigger steps for the colors in the last color_list
if i == len(color_lists)-1 :
n_colors -= 1
color_range = color_ranges[i]
spanned_ranges = sum(color_ranges[:i])
# Loop over colors in this color list
for j, color in enumerate(color_list) :
# Calculate the interpolation limit for this color
s = spanned_ranges + j * color_range/n_colors
# Convert to normalized RGB and create the cdict entries
rgb = hex_to_rgb(color)
#print(rgb)
r = (s, rgb[0], rgb[0])
g = (s, rgb[1], rgb[1])
b = (s, rgb[2], rgb[2])
# Add the cdict entries to their containers
red.append(r)
blue.append(b)
green.append(g)
"""
for i, color in enumerate(colors2) :
s = color_range1 + i * color_range2/(n_colors2-1)
rgb = [i/255. for i in color]
r = (s, rgb[0], rgb[0])
g = (s, rgb[1], rgb[1])
b = (s, rgb[2], rgb[2])
red.append(r)
blue.append(b)
green.append(g)
"""
# Create the new colormap
cdict = dict(red=tuple([r for r in red]),
blue=tuple([b for b in blue]),
green=tuple([g for g in green]))
cmap = LinearSegmentedColormap('arpes', cdict)
if __name__ == '__main__' :
# Create the test image data
x = np.arange(1000)
# no. of y points
ny = 50
ymin = 5
# 5% of data range
p = 0.05*(x.max() - x.min())
# spatial frequency of modulation
f = 60 * 2*np.pi/x.max()
data = np.zeros([ny, len(x)])
for i in range(ny) :
if i > ymin :
y = x + ( p*(i-ymin)*np.sin(x*f) )/(ny-ymin)
else :
y = x
data[i] = y
plt.pcolormesh(data, cmap=cmap)
plt.show()