@heff The heatmap trace selects the color from a colorscale, according to the normalized values in the lists of lists z (or a numpy array of shape (m,n)).
The discrete colorscale should be defined as follows:

find the max value for z, let us say that it is 125:

map the interval [0, max_val] to [0,1] by
t> t/max_val

mapping your thresholds [0, 10, 50, 100, 125] to [0,1], you get
[0, 0.08, 0.4, 0.8, 1]. 
define the discrete colorscale:
my_colorsc=[[0, 'rgb(255,255,255)'],#white [0.08, 'rgb(255,255,255'], [0.08, 'rgb(255,165,0)'],#orange [0.4, 'rgb(255,165,0)'], [0.4, 'rgb(255,0,0'], #red [0.8, 'rgb(255,0,0)'], [0.8, 'rgb(0,0,255)'], #blue [1, 'rgb(0,0,255)']]
Plotly doesnâ€™t recognize cmyk colors.