123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- function [colormap]=cbrewer(ctype, cname, ncol, interp_method)
- %
- % CBREWER - This function produces a colorbrewer table (rgb data) for a
- % given type, name and number of colors of the colorbrewer tables.
- % For more information on 'colorbrewer', please visit
- % http://colorbrewer2.org/
- %
- % The tables were generated from an MS-Excel file provided on the website
- % http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_updates.html
- %
- % INPUT:
- % - ctype: type of color table 'seq' (sequential), 'div' (diverging), 'qual' (qualitative)
- % - cname: name of colortable. It changes depending on ctype.
- % - ncol: number of color in the table. It changes according to ctype and
- % cname
- % - interp_method: if the table need to be interpolated, what method
- % should be used for interp1? Default='cubic'.
- %
- % A note on the number of colors: Based on the original data, there is
- % only a certain number of colors available for each type and name of
- % colortable. When 'ncol' is larger then the maximum number of colors
- % originally given, an interpolation routine is called (interp1) to produce
- % the "extended" colormaps.
- %
- % Example: To produce a colortable CT of ncol X 3 entries (RGB) of
- % sequential type and named 'Blues' with 8 colors:
- % CT=cbrewer('seq', 'Blues', 8);
- % To use this colortable as colormap, simply call:
- % colormap(CT)
- %
- % To see the various colormaps available according to their types and
- % names, simply call: cbrewer()
- %
- % This product includes color specifications and designs developed by
- % Cynthia Brewer (http://colorbrewer.org/).
- %
- % Author: Charles Robert
- % email: tannoudji@hotmail.com
- % Date: 06.12.2011
- % load colorbrewer data
- load('colorbrewer.mat')
- % initialise the colormap is there are any problems
- colormap=[];
- if (~exist('interp_method', 'var'))
- interp_method='cubic';
- end
- % If no arguments
- if (~exist('ctype', 'var') | ~exist('cname', 'var') | ~exist('ncol', 'var'))
- disp(' ')
- disp('INPUT:')
- disp(' - ctype: type of color table *seq* (sequential), *div* (divergent), *qual* (qualitative)')
- disp(' - cname: name of colortable. It changes depending on ctype.')
- disp(' - ncol: number of color in the table. It changes according to ctype and cname')
-
- disp(' ')
- disp('Sequential tables:')
- z={'Blues','BuGn','BuPu','GnBu','Greens','Greys','Oranges','OrRd','PuBu','PuBuGn','PuRd',...
- 'Purples','RdPu', 'Reds', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd'};
- z(:)
-
- disp('Divergent tables:')
- z={'BrBG', 'PiYG', 'PRGn', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn'};
- z(:)
-
- disp(' ')
- disp('Qualitative tables:')
- %getfield(colorbrewer, 'qual')
- z={'Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3'};
- z(:)
- plot_brewer_cmap
- return
- end
- % Verify that the input is appropriate
- ctype_names={'div', 'seq', 'qual'};
- if (~ismember(ctype,ctype_names))
- disp('ctype must be either: *div*, *seq* or *qual*')
- colormap=[];
- return
- end
- if (~isfield(colorbrewer.(ctype),cname))
- disp(['The name of the colortable of type *' ctype '* must be one of the following:'])
- getfield(colorbrewer, ctype)
- colormap=[];
- return
- end
- if (ncol>length(colorbrewer.(ctype).(cname)))
- % disp(' ')
- % disp('----------------------------------------------------------------------')
- % disp(['The maximum number of colors for table *' cname '* is ' num2str(length(colorbrewer.(ctype).(cname)))])
- % disp(['The new colormap will be extrapolated from these ' num2str(length(colorbrewer.(ctype).(cname))) ' values'])
- % disp('----------------------------------------------------------------------')
- % disp(' ')
- cbrew_init=colorbrewer.(ctype).(cname){length(colorbrewer.(ctype).(cname))};
- colormap=interpolate_cbrewer(cbrew_init, interp_method, ncol);
- colormap=colormap./255;
- return
- end
- if (isempty(colorbrewer.(ctype).(cname){ncol}))
-
- while(isempty(colorbrewer.(ctype).(cname){ncol}))
- ncol=ncol+1;
- end
- disp(' ')
- disp('----------------------------------------------------------------------')
- disp(['The minimum number of colors for table *' cname '* is ' num2str(ncol)])
- disp('This minimum value shall be defined as ncol instead')
- disp('----------------------------------------------------------------------')
- disp(' ')
- end
- colormap=(colorbrewer.(ctype).(cname){ncol})./255;
- end
|