1. Home
  2. DCOLOURS procedure

DCOLOURS procedure

Forms a band of graduated colours for graphics (P.W. Goedhart).


METHOD = string token Type of colour band required (spectral, blackbody, linear); default line
PLOT = string token What to plot (testgraph); default *


START = scalar or text Start value for the colour band; default * gives an appropriate default for the METHOD concerned
END = scalar, text or variate End value(s) for the colour band; default * gives an appropriate default for the METHOD concerned
GAMMA = scalar or variate The gamma-correction exponent(s) for the colour band; default 1
NCOLOURS = scalar or variate Number(s) of colours in the colour band; default 20
RGB = variates Saves the RGB colour values of each colour band
RED = variates Saves the red component of the RGB colour values
GREEN = variates Saves the green component of the RGB colour values
BLUE = variates Saves the blue component of the RGB colour values
TITLE = text General title for each test graph; default forms an informative title automatically
WINDOW = scalar Window number for each test graph; default 1
SCREEN = string token Whether to clear the screen before plotting each test graph or to continue plotting on the old screen (clear, keep); default clea


Procedure DCOLOURS creates a colour of graduated colours by interpolating between start and end colour values. You can save the RGB colours of the band, in a variate, using the RGB parameter. Alternatively, you can save the red, green and blue components of the colours using the RED, GREEN and BLUE parameters (again in variates).

A test graph displaying the colour band can be requested by setting option PLOT=testgraph. The WINDOW parameter supplies the window number for the plot (default 1). The TITLE parameter can supply a title for the test graph; if this is not set, a suitable title is generated automatically. You can set parameter SCREEN=keep to plot the test graph on an existing screen; by default the screen is cleared first.

The METHOD option provides a choice of three different types of colour band. The default, METHOD=linear, forms the colours by interpolating between start and end RGB values. The start value is specified by the START parameter, as either a scalar defining an RGB colour value, or a text containing the name of one of the pre-defined Genstat colours (see the PEN directive for the available names, or search for “Graphics Colours” in the on-line help). You can set the END parameter to a single scalar or text (giving either the RGB value or the name of the colour) to define the band as a single sequence of colours. Alternatively, you can define a variate or a text with several values to form the band from several sequences of colours. At each END colour, DCOLOURS then begins a new sequence running from that colour to the next END colour. The default values for START and END are 'white' and 'black'.

Setting METHOD=spectral forms an approximate rainbow spectrum for wavelengths between 380 nm and 780 nm. There can now be only a single sequence of colours. The START and END parameters specify the start and end wavelengths, as scalars, with default values of 380 and 780.

The final setting, METHOD=blackbody, forms colours of hot objects with temperatures between 500 K and 11000 K. Again, only a single sequence of colours is allowed. The START and END parameters specify the start and end temperatures, as scalars, with default values of 500 and 11000.

The NCOLOURS parameter specifies the number of colours in each sequence of colours, as a scalar for the spectral or blackbody methods, or as either a scalar or a variate for the linear method; the default is 20.

The red, green and blue values in each sequence are assumed by default to vary linearly with wavelength, temperature or red/green/blue components. Alternatively, you can use the GAMMA parameter to specify the power for a power transformation (default 1). It must be set to a scalar for the spectral or blackbody methods, and to either a scalar or a variate for the linear method. Its values must lie in the interval [0.25, 4].

The number of values specified by each set of END, GAMMA and NCOLOURS parameters can be different. However, the number of values in the setting of the END parameter determines the number of colour sequences in the band, and the values in the GAMMA setting and NCOLOURS setting are recycled as required.

Options: METHOD, PLOT.



For a single linear colour band the red component is calculated as follows:


CALCULATE count = (count - 1) / (NCOLOURS - 1)

& red = RED(START) + (RED(END) - RED(START)) * count

& red = INTEGER(255 * (red/255)**GAMMA)

Spectral and blackbody colours can be found at www.midnightkite.com/color.html which links to Fortran code for spectral colours at www.physics.sfasu.edu/astro/color/spectra.html, and for blackbody colours at www.physics.sfasu.edu/astro/color/blackbody.html.

Action with RESTRICT

Restrictions are not allowed.

See also

Directive: PEN.

Procedure: GETRGB.

Commands for: Graphics.


CAPTION   'DCOLOURS example'; STYLE=meta
          YMUPPER=0.03; YMLOWER=0.02]
PEN       -5; SIZE=0.9
" Default values START='red'; END='green' for spectral, blackbody and linear "
DCOLOURS  [METHOD=spectral; PLOT=test] GAMMA=0.3; WINDOW=21
DCOLOURS  [METHOD=spectral; PLOT=test] GAMMA=1.0; WINDOW=22; SCREEN=keep
DCOLOURS  [METHOD=spectral; PLOT=test] GAMMA=2.0; WINDOW=23; SCREEN=keep
DCOLOURS  [METHOD=blackbody; PLOT=test] GAMMA=0.3; WINDOW=24; SCREEN=keep
DCOLOURS  [METHOD=blackbody; PLOT=test] GAMMA=1.0; WINDOW=25; SCREEN=keep
DCOLOURS  [METHOD=blackbody; PLOT=test] GAMMA=2.0; WINDOW=26; SCREEN=keep
DCOLOURS  [METHOD=linear; PLOT=test] GAMMA=0.3; WINDOW=27; SCREEN=keep
DCOLOURS  [METHOD=linear; PLOT=test] GAMMA=1.0; WINDOW=28; SCREEN=keep
DCOLOURS  [METHOD=linear; PLOT=test] GAMMA=2.0; WINDOW=29; SCREEN=keep
" METHOD=linear using pre-defined colours "
DCOLOURS  [METHOD=linear; PLOT=test] START='red'; 'green'; WINDOW=30;\
DCOLOURS  [METHOD=linear; PLOT=test] START='red'; 'blue'; WINDOW=31;\
DCOLOURS  [METHOD=linear; PLOT=test] START='green'; 'blue'; WINDOW=32;\
" METHOD=linear with multiple stacked colour bands "
TEXT      start[1...10]; VALUE='red', 'green', 'blue', 'yellow', 'fuchsia',\ 
          'coral', 'peru', 'goldenrod', 'silver', 'hotpink'
TEXT      end[1...10]; VALUES=!t(yellow,green), !t(blue, fuchsia, white),\ 
          !t(aqua,red), !t(green,aqua,white), !t(blue,yellow,fuchsia,grey),\ 
          !t(cadetblue, olive, linen), !t(magenta, darkgreen, oldlace),\ 
          !t(chartreuse, plum, orchid), !t(salmon, teal, cyan, beige),\ 
          !t(steelblue, mintcream, sienna)
TEXT      screen; VALUE='clear'
DCOLOURS  [PLOT=test] start[]; END=end[]; WINDOW=21...30; SCREEN=clear,9(keep)
" use colours in a shade plot "
TEXT      [VALUES=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec] Mlab
FACTOR    [LABELS=Mlab] Month
VARIATE   [VALUES=2007...2010] Ylev
FACTOR    [LEVELS=Ylev] Year
          5.88,1.01,-6.33,12.33] Profit
PRINT     Profit
" form groups of profit levels "
GROUPS    [LMETHOD=*; REDEFINE=yes] !(#Profit); FACTOR=Profitfac;\
TABLE     [CLASSIFICATION=Month,Year] Profitgroup; VALUES=Profitfac
" pens running from red - white for =21 "
DCOLOURS  'red'; END=!t(white,blue); NCOLOURS=!(12,11); RGB=rgbvals
PEN       1...23; CAREA=#rgbvals
" select only the pen (group) values that ectually occur in the table "
CALCULATE Pens = UNIQUE(Profitfac)
XAXIS     3; MARKS=Ylev
" plot the table "
YAXIS     3; MARKS=!(1...12); LABELS=Mlab
DSHADE    [WINDOW=3; KEY=0; YORIENT=reverse] Profitgroup; PEN=Pens
Updated on March 8, 2019

Was this article helpful?