| Download | Test Image | Theory | Software | User Guide |
If you find this work useful please cite
Peter Kovesi. Good Colour Maps: How to Design Them.
arXiv:1509.03700 [cs.GR] 2015
This website presents a collection of colour maps that have been designed to have uniform perceptual contrast over their whole range.
Many colour maps provided by vendors have highly uneven perceptual contrast over their range. Colour maps may have points of locally high colour contrast leading to the perception of false anomalies in your data when there is none. Conversely colour maps may also have 'flat spots' of low perceptual contrast that prevent you from seeing features in the data.
To illustrate this the colour maps shown below are rendered on a test image consisting of a sine wave superimposed on a ramp function. The amplitude of the sine wave is modulated from its full value at the top of the image to 0 at the bottom.
What we are hoping to see is the sine wave uniformly visible across the image from left to right. We also want the contrast level, the distance down the image, at which the sine wave remains discernible to be uniform across the image. At the very bottom of the image, where the sine wave amplitude is 0, we just have a linear ramp which simply reproduces the colour map. Given that the underlying data is a featureless ramp we should not perceive any identifiable features across the bottom of the image.
At the top row of the test image the sine wave amplitude from peak to trough is 10% of the total data range. It is not unusual for the sine wave pattern to completely disappear in parts of some vendor colour maps. On the other hand the perceptually uniform colour maps exhibit no false features and the sine wave pattern is uniformly visible across the full width of the test image.
Note the colour maps presented here are intended for the display of data that varies over a continuous range. For data sets containing a limited set of categorical values it is suggested that you refer to the work by Cynthia Brewer at www.colorbrewer2.org
These colour maps are released under the Creative Commons BY License. A summary of the conditions can be found here. Basically, you are free to use these colour maps in anyway you wish as long as you give appropriate credit.
If you find this work useful please cite:
Peter Kovesi. Good Colour Maps: How to Design Them.
arXiv:1509.03700 [cs.GR] 2015
| Adobe Colour Table | CETperceptual_act.zip Adobe's .act format for use within Photoshop. |
| ArcGIS style file | CETperceptual_ArcGIS.style The maps are approximated using multi-part ramps with 64 segments. Please note that I have had to apply an adjustment to the colour ramps in an attempt to compensate for some strangeness in the way ArcGIS converts CIELAB values in the style file to RGB. I have been unable to reconcile the ArcGIS conversion results with those I obtain from any other published conversion routines, details are here. I am not entirely satisfied with the result but I believe the final ramps, as rendered, are reasonably close to their original design. |
| Cloud Compare | CETperceptual_CloudCompare.zip Place the colour maps in a folder and load using the Color Scales Manager Dialog |
| COMSOL Multiphysics | CETperceptual_COMSOL.zip Place the files in the folder: COMSOLxx/data/colortablesyou will then need to restart COMSOL for the colour maps to be available |
| CSV floating point RGB values in the range 0-1. | CETperceptual_csv_0_1.zip Can be used with the Madagascar package. |
| CSV integer RGB values in the range 0-255. | CETperceptual_csv_0_255.zip |
| ER Mapper, Intrepid | CETperceptual_ERMapper.zip ER Mapper's .lut format. Used by Intrepid and I think these can also be used with MapInfo. |
| Geosoft Oasis montaj |
CETperceptual_tbl.zip Geosoft's .tbl format. |
| GeoGraphix | CETperceptual_GeoGraphix.zip GeoGraphix binary .PAL format. |
| GMT | CETperceptual_GMT.zip Dynamic color palette tables (.cpt) files for GMT, The Generic Mapping Tools. If you use gmt makecpt to construct a static CPT file from these files you should avoid using a large z interval when using the -T option otherwise the properties of some colour maps may be compromised. Choose a z interval such that the total range is divided into at least 64 intervals. |
| GOCAD | CETperceptual_GOCAD.zip Paradigm GOCAD .cmap format. |
| Gwyddion | CETperceptual_Gwyddion.zip Find where your Gwyddion installation has been placed in your system and copy the files into the folder: gwyddion/share/gwyddion/gradients
|
| ImageJ | CETperceptual_ImageJ.zip ImageJ's .lut format. |
| Julia | PerceptualColourMaps.jl For those working in Julia this package allows you to geneate all these colour maps for use with various Julia plotting packages. They are also available directly within the Plots.jl package as the colorcet color gradient library. |
| Kingdom | CETperceptual_CLB.zip IHS Markit Kingdom's .CLB format. Note these colour maps have 230 colour values which is the maximum that can be specified in the .CLB format. |
| Landmark DecisionSpace Geophysics | CETperceptual_cl2.zip Landmark's .cl2 format. |
| MagicPlot | These colour maps are available in MagicPlot's format at magicplot.com/wiki/palettes |
| MATLAB | colorcet.m A stand-alone function that contains pre-generated arrays of the perceptually uniform colour maps. |
| MicroImages TNTmips | No need to download These colour maps are incorporated in their latest release. |
| Micromine | No need to download These colour maps are included in Micromine 2018. |
| NCL | CETperceptual_NCL.zip NCL, NCAR Command Language .rgb files. |
| ParaView | CETperceptual_ParaView.xml Load using: Color map editor -> Choose preset -> Import |
| Petrel, DUG Insight | CETperceptual_alut.zip Schlumberger Petrel .alut format. These can also be used with DownUnder GeoSolutions Insight. |
| Petrosys | CETperceptual_Petrosys.zip Petrosys .pal format. These colour maps are now also available directly from Petrosys. |
| Python | github.com/bokeh/colorcet This package gives you access to these colour maps for use with Python plotting programs such as Bokeh, Matplotlib, HoloViews GeoViews, and Datashader. Thanks to James Bednar. |
| R |
CRAN.R-project.org/package=cetcolor
See also: cran.r-project.org/web/packages/pals/vignettes/pals_examples.html The pals package gathers together a number of colour maps including the CET perceptually uniform colour maps and also includes R code for generating the colour map test image. |
| QGIS style file | CETperceptual_QGIS.xml The maps are approximated using multi-part ramps with 64 segments. Load the style file using the QGIS menu sequence: Settings -> Style Manager -> Share -> Import |
| Surfer | CETperceptual_clr.zip Golden Software's Surfer .clr format. |
It seems my new hobby is collecting colour map formats! Let me know of any other formats I should generate. This XKCD Cartoon seems to apply here.
Please note that I have not been able to test all these file formats as I do not have access to all these packages. If you encounter any problems please let me know. Any other feedback you might have would also be appreciated.
This work was supported by the Centre for Exploration Targeting, School of Earth Sciences at The University of Western Australia.
I am indebted to Tom Horrocks for his help in generating the ArcGIS style file.
The colour maps are organised according to the attributes: Linear, Diverging, Rainbow, Cyclic, and Isoluminant.
![]()
Linear colour maps are intended for general use and have
colour lightness values that increase or decrease linearly over
the colour map's range.
![]()
Diverging
colour maps are suitable where the data being displayed has a well
defined reference value and we are interested in differentiating
values that lie above, or below, the reference value. The centre
point of the colour map will be white, black or grey. It should be
noted that, in general, diverging colour maps have a small perceptual
flat spot at the centre. The exception being linear-diverging maps
which avoid this problem.
![]()
Rainbow
colour maps are widely used but often misused. It is suggested that
they be avoided because they have reversals in the lightness gradient
at yellow and red which can upset a viewer's perceptual ordering of
the colours in the colour map. However, they are attractive and
perhaps can have a legitimate use where the main aim is to
differentiate data values rather than communicate a data ordering. I
believe the two rainbow colour maps presented here have minimal badness
though they do have localised perceptual flat spots at yellow and red.

Cyclic colour
maps have colours that are matched at each end. They are intended for
the presentation of data that is cyclic such as orientation values or
angular phase data. They require particular care in their design (the
standard colour circle is not a good map).
![]()
Isoluminant colour maps are constructed from colours of equal
perceptual lightness. These colour maps are designed for use with
relief shading. On their own these colour maps are not very useful
because features in the data are very hard to discern. However, when
used in conjunction with relief shading their constant lightness means
that the colour map does not induce an independent shading pattern that
will interfere with, or even hide, the structures induced by the
relief shading. The relief shading provides the structural information
and the colours provide the data classification information.
![]()
Colour Blind colour maps. These are not designed to be merely
'colour blind safe'. These maps have been constructed to lie within
either the 2D model of protanopic/deuteranopic colour space, or the 2D
model of tritanopic colour space. Hopefully by working within these
colour spaces people who are colour blind will be able to share a
common perceptual interpretation of data with those who have normal
colour vision. It also ensures maximal use of the available colour
spaces, and allows chroma and lightness to be properly used in the
design of colour maps. I would value any feedback on the usefulness,
or otherwise, of these maps.
* Conference
presentation describing the design of these colour maps
I devised the following naming convention to allow semi-automatic naming of colour maps in a way that described their key characteristics. However the resulting names are too complex, too long to type, impossible to remember, and I do not use them!
In practice I simply refer to the colour maps by a number prefixed by one or two characters to indicate whether the map is linear (l), diverging (d), rainbow (r), cyclic(c), isoluminant (i) or colour blind (cb). Thus, for example, the linear greyscale is 'l1' or 'cet-l1', the heat colour map is 'l3' or 'cet-l3' and the blue-white-red diverging map is 'd1' or 'cet-d1' etc, etc. In the visual catalogue shown further below you will see each colour map with both its simple and complex names.
Anyway, here is the description of the complex naming scheme.
| r - red | g - green | b - blue |
| c - cyan | m - magenta | y - yellow |
| o - orange | v - violet | |
| k - black | w - white | j - grey |

CET-L1: linear_grey_0-100_c0_n256

CET-L2: linear_grey_10-95_c0_n256

CET-L3: linear_kryw_0-100_c71_n256

CET-L4: linear_kry_0-97_c73_n256

CET-L5: linear_kgy_5-95_c69_n256

CET-L6: linear_kbc_5-95_c73_n256

CET-L7: linear_bmw_5-95_c86_n256

CET-L8: linear_bmy_10-95_c71_n256

CET-L9: linear_bgyw_20-98_c66_n256

CET-L10: linear_gow_60-85_c27_n256

CET-L11: linear_gow_65-90_c35_n256

CET-L12: linear_blue_95-50_c20_n256

CET-L13: linear_ternary-red_0-50_c52_n256

CET-L14: linear_ternary-green_0-46_c42_n256

CET-L15: linear_ternary-blue_0-44_c57_n256

CET-L16: linear_kbgyw_5-98_c62_n256

CET-L17: linear_worb_100-25_c53_n256

CET-L18: linear_wyor_100-45_c55_n256

CET-L19: linear_wcmr_100-45_c42_n256

CET-D1: diverging_bwr_40-95_c42_n256

CET-D1A: diverging_bwr_20-95_c54_n256

CET-D2: diverging_gwv_55-95_c39_n256

CET-D3: diverging_gwr_55-95_c38_n256

CET-D4: diverging_bkr_55-10_c35_n256

CET-D6: diverging_bky_60-10_c30_n256

CET-D7: diverging-linear_bjy_30-90_c45_n256

CET-D8: diverging-linear_bjr_30-55_c53_n256

CET-D9: diverging_bwr_55-98_c37_n256

CET-D10: diverging_cwm_80-100_c22_n256

CET-D13: diverging_bwg_20-95_c41_n256

CET-R3: diverging-rainbow_bgymr_45-85_c67_n256

CET-R1: rainbow_bgyrm_35-85_c69_n256

CET-R2: rainbow_bgyr_35-85_c72_n256

CET-C1: cyclic_mrybm_35-75_c68_n256

CET-C2: cyclic_mygbm_30-95_c78_n256

CET-C3: cyclic_rwbkr_15-85_c43_n256

CET-C4: cyclic_wrwbw_40-90_c42_n256

CET-C5: cyclic_grey_15-85_c0_n256

CET-I1: isoluminant_cgo_70_c39_n256

CET-I2: isoluminant_cgo_80_c38_n256

CET-I3: isoluminant_cm_70_c39_n256

CET-D11: diverging-isoluminant_cjo_70_c25_n256

CET-D12: diverging-isoluminant_cjm_75_c23_n256

CET-CBL1: linear-protanopic-deuteranopic_kbjyw_5-95_c25_n256

CET-CBL2: linear-protanopic-deuteranopic_kbw_5-98_c40_n256

CET-CBD1: diverging-protanopic-deuteranopic_bwy_60-95_c32_n256

CET-CBC1: cyclic-protanopic-deuteranopic_bwyk_16-96_c31_n256

CET-CBC2: cyclic-protanopic-deuteranopic_wywb_55-96_c33_n256

CET-CBTL1: linear-tritanopic_krjcw_5-98_c46_n256

CET-CBTL2: linear-tritanopic_krjcw_5-95_c24_n256

CET-CBTD1: diverging-tritanopic_cwr_75-98_c20_n256

CET-CBTC1: cyclic-tritanopic_cwrk_40-100_c20_n256

CET-CBTC2: cyclic-tritanopic_wrwc_70-100_c20_n256