File Exchange

## Color Palette Tables (.cpt) for Matlab

version 1.7 (1.43 MB) by

Create and apply GMT-style colormaps in Matlab

Updated

cptcmap.m: color palette tables (.cpt) for Matlab

Liang Han

Lei Cheng

### Lei Cheng (view profile)

Thank you so much.! It is awesome!

wkillers

ashraf rateb

Matteo Bagagli

Great tool!

E. Cheynet

### E. Cheynet (view profile)

Superb. Thanks for writing this easy-to-use, well-documented function.

Kelly Kearney

### Kelly Kearney (view profile)

I've addressed Seth's question via email. But in case others encounter this, the behavior he was seeing is as intended. While the length of the resulting colormap can be specified via the ncol input, the number of unique colors in that colormap is determined by the .cpt file itself. The GMT_Haxby colormap defines 32 specific colors, so increasing the resolution of the colormap via ncol will create a larger colormap array, but many of these values will simply be replicates.

Seth

### Seth (view profile)

More detail on my comment below:

cptcmap('GMT_Haxby','ncol', 4) produces a contour plot with four colors;
cptcmap('GMT_Haxby','ncol', 8) produces a contour plot with eight colors;
cptcmap('GMT_Haxby','ncol', 32) produces a contour plot with thirty-two colors;

However, cptcmap('GMT_Haxby','ncol', 256) produces a contour plot with 32 colors, not 256 colors. Any number above 32 leads to a plot with just 32 colors.

Matlab novice, hope I'm not missing something trivial!

Seth

### Seth (view profile)

I'm having trouble getting these contour plots to use more than ~32 colors with this function.

If I use the command:

colormap(jet(256));

then contour plots plot using the jet colorscheme with 256 colors. However, if I use the command:

cptcmap('GMT_Haxby','ncol', 256);

then all of the subsequent contour plots display with only ~32 colors.

Any suggestions? Thanks!

Claire

### Claire (view profile)

Function works brilliantly!! Thanks so much!

Kelly Kearney

### Kelly Kearney (view profile)

@Claire

Sorry, I always forget that roundn is part of the Mapping toolbox. Just replace the roundn call:

space = roundn(space, -3);

with

space = round(space*1e3)/1e3;

Claire

### Claire (view profile)

I don't have access to the "roundn" function. Is there a work around so that I can get your function working?

Frank Engel

### Frank Engel (view profile)

Excellent and very useful. Works as expected, and had no problems using with gradients provided from cpt-city (http://soliton.vm.bytemark.co.uk/pub/cpt-city/)

Jesse Hansen

### Jesse Hansen (view profile)

Very useful for bathymetric mapping. Please note that there is a dependency on the mapping toolbox due to the use of the 'roundn' function. This could easily be replaced by 1 line of standard Matlab code.

angela

Kelly Kearney

### Kelly Kearney (view profile)

@camilo melo,

I don't have R20011b, so I can't test it, but I can't think of any reason it wouldn't work in that version. Based on the error message you mention, my guess is you tried to call the function without any input arguments; it needs at least one (the name of the colormap).

camilo melo

### camilo melo (view profile)

hi, does this function works for MATLAB R2011b?? i tried to use it but got this error message Index exceeds matrix dimensions.

Error in cptcmap (line 123)
[blah, blah, ext] = fileparts(varargin{1});

Felipe G. Nievinski

### Felipe G. Nievinski (view profile)

Another one, trying

cptcmap('sst')

if ~strcmp(varargin{1}(end-3:end), '.cpt') % without extension

for:

if (numel(varargin{1}) <= 4) || ~strcmp(varargin{1}(end-3:end), '.cpt') % without extension

Felipe G. Nievinski

### Felipe G. Nievinski (view profile)

Another one, trying

cptcmap('sst')

if ~strcmp(varargin{1}(end-3:end), '.cpt') % without extension

for:

if (numel(varargin{1}) <= 4) || ~strcmp(varargin{1}(minend-3:end), '.cpt') % without extension

Felipe G. Nievinski

### Felipe G. Nievinski (view profile)

You might want to replace l.83:

cptpath = './cptfiles';

with:

cptpath = fullfile(fileparts(which('cptcmap')), 'cptfiles');

That way the source code needs not be modified when first downloading the package or later when moving the routine files around.

I was having problems trying

cptcmap('elevation')

where elevation.cpt was downloaded from cpt-city and placed in the cptpath; it turns out that l.98,

if exist(varargin{1}, 'file') % full filename and path given

would find this other file instead:

which elevation
C:\Program Files\MATLAB\R2009b\toolbox\map\map\elevation.m

You might want to replace the block l.98-111 with the following (minimally modified):

if ~strcmp(varargin{1}(end-3:end), '.cpt') % without extension
varargin{1} = [varargin{1} '.cpt'];
end
if exist(varargin{1}, 'file') % full filename and path given
filename = varargin{1};
else % only file name given
filename = fullfile(cptpath, varargin{1});
if ~exist(filename, 'file')
end
end

Finally, not sure why the __MACOSX subdirectory is being distributed.

Felipe G. Nievinski

### Felipe G. Nievinski (view profile)

Great idea, always wanted to make my matlab maps look like gmt's. Also thanks for pointing out to cpt-city, it's a great collection.

You might want to use the acknowledgement field in the FEX form, so that your submission is back-linked from related entries, e.g., 28982 and the ones linked from there.

Kelly Kearney

### Kelly Kearney (view profile)

Marios,

If by the inverse colormap, you mean you want to flip the direction of the colors, then yes, use the 'flip' option:

cptcmap('GMT_seis', 'flip', true)

-Kelly

Marios Karaoulis

### Marios Karaoulis (view profile)

Hi. Very nice package. Is it possible to use the inverse colormap of GMT_seis.cpt?