# Controlling ColorFunctionScaling [duplicate]

Is there a way to control the scaling of ColorFunction beside just to turn it off and on with ColorFunctionScaling?

Two problems with this approach are:

1. Repeating colours if the scaling is small compared to the plot range.

2. Uniform colour if the scaling is large compared to the plot range.

-

## marked as duplicate by MarcoB, Louis, Edmund, Karsten 7., Yves KlettMay 26 at 5:43

By default, ColorFunctionScaling -> True rescales the value to lie between 0 and 1. You can explicitly control the scaling of the ColorFunction by setting ColorFunctionScaling -> False and implementing the rescaling in the ColorFunction itself. The following examples should clarify what these options do and how to design your own:

### Default behaviour

Plot[2 Cos[x], {x, 0, 4 π}, PlotStyle -> AbsoluteThickness[3], ImageSize -> 300,
ColorFunction -> ColorData["DarkRainbow"], ColorFunctionScaling -> #] & /@ {True, False} // Row


You see that with True, all the values are rescaled to lie between 0 and 1 before passing to the ColorFunction, whereas with False, the values greater than 1 and less than 0 are clipped to 1 and 0 respectively.

In other words, the following setting (for the example above):

ColorFunctionScaling -> True, ColorFunction -> cf


is equivalent to

ColorFunctionScaling -> False, ColorFunction -> (cf@Rescale[#2, {min, max}, {0, 1}]&)


where cf is the color function and min and max are the minimum and maximum values of the function you're plotting (for the values being plotted), which in this case are -2 and 2 respectively.

### Custom rescaling

The explanation above should give you an idea of how to go about implementing your custom rescaling function. Here's an example that exponentially varies from approximately 0.22 to 1:

Plot[2 Cos[x], {x, 0, 4 π}, PlotStyle -> AbsoluteThickness[3], ColorFunctionScaling -> False,
ColorFunction -> (ColorData["DarkRainbow"]@Exp@Rescale[#2, {-2, 2}, {-1.5, 0}]&)]


-