Return to Ferret FAQ


How can I create a palette to show out-of-bounds data?


We often want to use a "standard" color palette -- specific colors associated with specific data values -- but the data may occasionally go outside the range of this preset palette. If so, we might like to use a distinct color (say gray) to color the out-of-range values.

Example:

   yes? USE coads_climatology
   yes? ! Define a variable with range outside the ocean temperature range
   yes? LET svar = (1.6*sst) - 5  
   yes? FILL/L=1/PALETTE=ocean_temp.spk/LEV=20 svar
   yes? GO fland 60 black

[Output Graphic]

Explanation:

(See the general FAQ on color palettes and the Users Guide for more on By_value color palettes.) Here is the color palette ocean_temp.spk, associating data values (in the first column) with colors:

   RGB_Mapping By_value
    
   ! SetPt    Red  Green   Blue
      -2.0   80.0    0.0  100.0  ! violet
       0.0   30.0   20.0  100.0  ! blue
      10.0    0.0   60.0   30.0  ! green
      20.0  100.0  100.0    0.0  ! yellow
      30.0  100.0    0.0    0.0  ! red
      35.0   60.0    0.0    0.0  ! dark red
   

When values of our variable are outside the range specified in the palette, they take on the first or last color of the palette. Instead, we would like to show those in an obviously different color, such as grey.

Solution:

Define a new palette, with one color of grey before the first value and a second grey after the last value (or one could use the same color). Here is ocean_temp_bounds.spk:

   RGB_Mapping By_value
    
   ! SetPt    Red  Green   Blue
    -2.001   40.0   40.0   40.0  ! dark gray
      -2.0   80.0    0.0  100.0  ! violet
       0.0   30.0   20.0  100.0  ! blue
      10.0    0.0   60.0   30.0  ! green
      20.0  100.0  100.0    0.0  ! yellow
      30.0  100.0    0.0    0.0  ! red
      35.0   60.0    0.0    0.0  ! dark red
    35.001   80.0   80.0   80.0  ! light gray
   yes? FILL/L=1/PALETTE=ocean_temp_bounds.spk/LEV=20 svar
   yes? GO fland 60 black

[Output Graphic]

Or, use the /LEVELS qualifier with upper and lower indefinite levels for a nicer color bar

   yes? FILL/L=1/PALETTE=ocean_temp_bounds.spk/LEV=(-inf),(-2,36,2)(inf)  svar
   yes? GO fland 60 black

[Output Graphic]