# grd2cpt

Make linear or histogram-equalized color palette table from grid

## Synopsis

gmt grd2cpt ingrid [ -A transparency[+a] ] [ -C cpt ] [ -D[i|o] ] [ -E[nlevels][+c][+f file] ] [ -F[R|c|g|h|r|x][+c[label]][+k keys] ] [ -G zlo/zhi ] [ -H ] [ -I[c][z] ] [ -L minlimit/maxlimit ] [ -M ] [ -N ] [ -Q[i|o] ] [ -R region ] [ -S h|l|m|u ] [ -T start/stop/inc|n] [ -V[level] ] [ -W[w] ] [ -Z ] [ -bo binary ] [ -h headers ] [ -o flags ] [ --PAR=value ]

Note: No space is allowed between the option flag and the associated arguments.

## Description

grd2cpt reads one or more grid files and writes a static color palette (CPT) file. In classic mode we write the CPT to standard output, while under modern mode we simply save the CPT as the current session CPT (but see -H). The CPT is based on an existing dynamic master CPT of your choice, and the mapping from data value to colors is through the data’s cumulative distribution function (CDF), so that the colors are histogram equalized. Thus if the grid(s) and the resulting CPT are used in grdimage with a linear projection, the colors will be uniformly distributed in area on the plot. Let z be the data values in the grid. Define CDF(Z) = (# of z < Z) / (# of z in grid). (NaNs are ignored). These z-values are then normalized to the master CPT and colors are sampled at the desired intervals.

The color palette includes three additional colors beyond the range of z-values. These are the background color (B) assigned to values lower than the lowest z-value, the foreground color (F) assigned to values higher than the highest z-value, and the NaN color (N) painted wherever values are undefined. For color tables beyond the current GMT offerings, visit cpt-city.

If the master CPT includes B, F, and N entries, these will be copied into the new master file. If not, the parameters COLOR_BACKGROUND, COLOR_FOREGROUND, and COLOR_NAN from the gmt.conf file or the command line will be used. This default behavior can be overruled using the options -D, -M or -N.

The color model (RGB, HSV or CMYK) of the palette created by makecpt will be the same as specified in the header of the master CPT. When there is no COLOR_MODEL entry in the master CPT, the COLOR_MODEL specified in the gmt.conf file or on the command line will be used.

## Required Arguments

ingrid[=ID|?varname][+b band][+d divisor][+n invalid][+o offset][+s scale]

> Optionally, append =ID for reading a specific file format [Default is =nf] or ?varname for a specific netCDF variable [Default is the first 2-D grid found by GMT]. The following modifiers are supported:

> > - +b - Select a band [Default is 0].

> > - +d - Divide data values by the given divisor [Default is 1].

> > - +n - Replace data values matching invalid with NaN.

> > - +o - Offset data values by the given offset [Default is 0].

> > - +s - Scale data values by the given scale [Default is 1].

> Note: Any offset is added after any scaling.

## Optional Arguments

-A transparency[+a]

  Sets a constant level of transparency (0-100) for all color slices. Append +a to also affect the fore-, back-, and nan-colors [Default is no transparency, i.e., 0 (opaque)].

-C[[section/]master_cpt[+h[hinge]][+u|U unit]|local.cpt|color\(_1\),color\(_2\)[,color\(_3\),…]]

  Name of an input CPT file or a comma-separated list of colors from which to build a CPT. If no argument is given then under modern mode we select the current CPT. Generally, the input can be many things:

  1. A standard GMT master_cpt file, e.g., earth (see Of Colors and Color Legends) and can be either addressed by master_cpt or section/master_cpt (without the .cpt extension).

  2. File name of already custom-made local.cpt file.

  3. Build a linear continuous CPT from color\(_1\),color\(_2\)[,color\(_3\),…] automatically, where z starts at 0 and is incremented by one for each color. In this case, color\(_i\) can be a r/g/b (e.g., 255/100/75), or h-s-v triplet (e.g., 180-0.8-1), a c/m/y/k quadruple (e.g., 80/50/40/30), an HTML hexadecimal color (e.g. #aabbcc), or a color name. No spaces between commas are allowed.

  A few modifiers pertains to hinges and units:

  - +h - If given a master CPT with soft hinges then you can enable the hinge at data value hinge [0], whereas for hard-hinge CPTs you can adjust the location of the hinge [0] but not disable it.

  - +u - For any other master_cpt, you may convert their z-values from another distance unit to meter.

  - +U - Likewise, you may convert their z-values from meter to another unit.

  Note - For +u|U, a unit must be selected from e|f|k|M|n|u.

-D[i|o]

  Select the back- and foreground colors to match the colors for lowest and highest z-values in the output CPT [Default (-D or -Do) uses the colors specified in the master file, or those defined by the parameters COLOR_BACKGROUND, COLOR_FOREGROUND, and COLOR_NAN]. Append i to match the colors for the lowest and highest values in the input (instead of the output) CPT.

-E[nlevels][+c][+f file]

  Create a linear color table by using the grid z-range as the new limits in the CPT, so the number of levels in the CPT remain unchanged. Alternatively, append nlevels and we will instead resample the color table into nlevels equidistant slices. As an option, append +c to estimate the cumulative density function of the data and assign color levels accordingly. If +c is used then you may optionally append +f to save the CDF to file; see -bo and -o for output formatting.

-F[R|c|g|h|r|x][+c[label]][+k keys]

  Force output CPT to be written in the desired format set by the directives, thus selecting among color names, single gray-scale values, color names, r/g/b only, h-s-v, c/m/y/k, or #rrggbb hex codes. Choose from:

  - R - Output color names if possible (and use r/g/b otherwise) [Default].

  - c - Output color using c/m/y/k values.

  - g - Output gray singles (will transform any colors to gray via YIQ transformation).

  - h - Output h-s-v triplets.

  - r - Output r/g/b codes only (even if a color name applies).

  - x - Output #rrggbb hex codes.

  Optionally or alternatively, append these modifiers:

  - +c - Write discrete palettes in categorical format. If label is appended then we create labels for each category to be used when the CPT is plotted. The label may be a comma-separated list of category names (you can skip a category by not giving a name), or give start[-], where we automatically build monotonically increasing labels from start (a single letter or an integer). Append - to build ranges start-start+1 instead.

  - +k - Categorical CPT should have string keys instead of numerical entries. Append keys, which is either a file with one key per record or a single letter (e.g., D), then we build sequential letter keys (e.g., D, E, F, …) starting at that point.

  Notes: (1) For comma-separated lists of keys, use -T instead. (2) If +cM is given and the number of categories is 12, then we automatically create a list of month names. (3) If +cD is given and the number of categories is 7 then we make a list of weekday names. The format of these labels will depend on the FORMAT_TIME_PRIMARY_MAP, GMT_LANGUAGE and possibly TIME_WEEK_START settings.

-G zlo/zhi

  Truncate the incoming CPT so that the lowest and highest z-levels are to zlo and zhi. If one of these equal NaN then we leave that end of the CPT alone. The truncation takes place before any resampling. See also Manipulating CPTs

-H

  Modern mode only: Write the CPT to standard output as well [Default saves the CPT as the session current CPT]. Required for scripts used to make animations via movie and batch where we must pass named CPT files.

-I[c][z]

  Append c [Default] to reverse the sense of color progression in the master CPT. Also exchanges the foreground and background colors, including those specified by the parameters COLOR_BACKGROUND and COLOR_FOREGROUND. Append z to reverse the sign of z-values in the color table. Note that this change of z-direction happens before -G and -S values are used so the latter must be compatible with the changed z-range. See also Manipulating CPTs

-L minlimit/maxlimit

  Limit range of CPT to minlimit/maxlimit, and don’t count data outside this range when estimating CDF(Z). To set only one limit, specify the other limit as “-” [Default uses min and max of data.]

-M

  Overrule background, foreground, and NaN colors specified in the master CPT with the values of the parameters COLOR_BACKGROUND, COLOR_FOREGROUND, and COLOR_NAN specified in the gmt.conf file or on the command line. When combined with -D, only COLOR_NAN is considered.

-N

  Do not write out the background, foreground, and NaN-color fields [Default will write them].

-Q[i|o]

  Selects a logarithmic interpolation scheme [Default is linear]. -Qi expects input z-values to be \(\log_{10}`(z), assigns colors, and writes out z [Default]. **-Qo** takes :math:\)log_{10}`(z) first, assigns colors, and writes out z.

-R xmin/xmax/ymin/ymax[+r][+u unit]

  Specify the region of interest. (See full description) (See cookbook information).

-Sh|l|m|u

  Force the color table to be symmetric about zero (from -R to +R). Append flag to set the range R: l for R =|zmin|, u for R = |zmax|, m for R = min(|zmin|, |zmax|), or h for R = max(|zmin|, |zmax|).

-T start/stop/inc or -T n

  Set steps in CPT. Calculate entries in CPT from start to stop in steps of (inc). Default chooses arbitrary values by a crazy scheme based on equidistant values for a Gaussian CDF. Use -T n to select n points from such a cumulative normal distribution [11].

-V

  Verbose operation. This will write CDF(Z) estimates to stderr. [Default is silent.]

-W[w]

  Do not interpolate the input color table but pick the output colors starting at the beginning of the map. This is particularly useful in combination with a categorical color table. Alternatively, use -Ww to produce a wrapped (cyclic) color table that endlessly repeats its range.

-Z

  Force a continuous CPT [Default is discontinuous].

-bo record[+b|l] (more …)

  Select native binary format for table output. [Default is 2]. This option only applies if -E selects CDF output.

-h[i|o][n][+c][+d][+m segheader][+r remark][+t title] (more …)

  Skip or produce header record(s).

-^ or just -

  Print a short message about the syntax of the command, then exit (Note: on Windows just use -).

-+ or just +

  Print an extensive usage (help) message, including the explanation of any module-specific option (but not the GMT common options), then exit.

-? or no arguments

  Print a complete usage (help) message, including the explanation of all options, then exit.

--PAR=value

  Temporarily override a GMT default setting; repeatable. See gmt.conf for parameters.

-o cols[+l][+d divisor][+s scale|d|k][+o offset][,…][,t[word]] (more …)

  Select output columns and transformations (0 is first column, t is trailing text, append word to write one word only).

## Notes on Transparency

The PostScript language originally had no accommodation for transparency. However, Adobe added an extension that allows developers to encode some forms of transparency using the PostScript language model but it is only realized when converting the PostScript to PDF (and via PDF to any raster image format). GMT uses this model but there are some limitations: Transparency can only be controlled on a per-object or per-layer basis. This means that a color specifications (such as those in CPTs of given via command-line options) only apply to vector graphic items (i.e., text, lines, polygon fills) or to an entire layer (which could include items such as PostScript images). This limitation rules out any mechanism of controlling transparency in such images on a pixel level. Note that polygons and lines will honor any object-specific transparency, but if none is set then these items will inherit the layer transparency (if any) set via -t transp.

## Color Hinges

Some of the GMT master dynamic CPTs are actually two separate CPTs meeting at a hinge. Usually, colors may change dramatically across the hinge, which is used to separate two different domains (e.g., land and ocean across the shoreline, for instance). CPTs with a hinge will have their two parts stretched to the required range separately, i.e., the bottom part up to the hinge will be stretched independently of the part from the hinge to the top, according to the prescribed new range. Hinges are either hard or soft. Soft hinges must be activated by appending +h[hinge] to the CPT name. If the selected range does not include an activated soft or hard hinge then we only resample colors from the half of the CPT that pertains to the range. See Of Colors and Color Legends for more information.

## Discrete versus Continuous CPT

All CPTs can be stretched, but only continuous CPTs can be sampled at new nodes (i.e., by given an increment in -T). We impose this limitation to avoid aliasing the original CPT.

## Examples

Note: Below are some examples of valid syntax for this module. The examples that use remote files (file names starting with `@`) can be cut and pasted into your terminal for testing. Other commands requiring input files are just dummy examples of the types of uses that are common but cannot be run verbatim as written.

To get a reasonable and symmetrical color table for the data in the region 0/60/0/60 from the remote 5m relief file, using the geo color table, try:

    gmt grd2cpt @earth_relief_05m -R0/60/0/60 -Cgeo -Su

Sometimes you don’t want to make a CPT (yet) but would find it helpful to know that 90% of your data lie between z1 and z2, something you cannot learn from grdinfo. So you can do this to see some points on the CDF(Z) curve (use -V option to see more):

    gmt grd2cpt mydata.nc -V > /dev/null

To make a CPT with entries from 0 to 200 in steps of 20, and ignore data below zero in computing CDF(Z), and use the built-in master cpt file relief, run

    gmt grd2cpt mydata.nc -Crelief -L0/10000 -T0/200/20 > mydata.cpt

To determine the empirical cumulative density function of a grid and create a CPT that would give equal area to each color in the image, and save the CDF to file as well. try:

    gmt grd2cpt @earth_relief_10m -E11+c+fcdf.txt > cdf.cpt

Here, cdf.txt would be the cumulative hypsometric curve for the Earth.

## Note on CPTs in Modern Mode

In modern mode, CPTs are rarely needed to be named explicitly. Instead, when a module that may create a CPT, such as grd2cpt and makecpt (or even grdimage when no color table is available), the behavior under modern mode is to write that CPT to a hidden file in the session directory. When a module requires a CPT (e.g., grdimage not given -C or plot given -C with no name) then we read this hidden CPT (if it exists). This file is called the current CPT. In fact, there are several levels of current CPTs that may all be different, and some may not be present. If you create a CPT within an inset operation then that CPT is only accessible during the inset plotting; it thus only has the inset as its scope. If you create a CPT while positioned into a specific subplot, then that CPT is likewise only accessible to that subplot. If, on the other hand, you make a CPT after subplot begin but before any plotting then that CPT is available to all the subplots (but can be locally overridden by a subplot-specific CPT mention above). Finally, each call to figure means you may have a figure-specific CPT, should you create them. If none exists then the session CPT is used. The rule gmt follows is to always get the CPT with the most restricted scope that is visible from where you are in the plotting hierarchy. If not found we go up the hierarchy to CPTs with broader scope, and if none is ultimately found (and the module, unlike grdimage, cannot create a CPT by itself), then you have likely made a scripting error. There are cases in modern mode when you must explicitly create a named CPT using the -H option. One such case is when making movies with movie since you will want to create the CPT once and have movie access it again and again. Since each movie frame is a separate session there is no cross-session sharing of current CPTs.

## See Also

gmt, gmt.conf, grdhisteq, grdinfo, makecpt

## References

Crameri, F., (2018). Scientific colour-maps. Zenodo. http://doi.org/10.5281/zenodo.1243862

Crameri, F. (2018), Geodynamic diagnostics, scientific visualisation and StagLab 3.0, Geosci. Model Dev., 11, 2541-2562, doi:10.5194/gmd-11-2541-2018.