Get from Ico-github-logo

Highlights from
contourfcmap: filled contour plot with precise colormap

  • function_handle.m
  • contourcs(varargin)
    CONTOURCS Wrapper to CONTOURS to Obtain Structure Output
  • contourfcmap(x,y,z,clev,c...
    CONTOURFCMAP Filled contour plot with specified colors
  • fillnan(v, coords, varargin)
    FILLNAN Fill in missing values in an array with nearest neighbor
  • multiplepolyint(x, y, flag)
    MULTIPLEPOLYINT Multiple polygon intersection
  • parsepv(Param, pvpairs, v...
    PARSEPV Parses parameter/value pairs
  • View all files
4.57143
4.6 | 7 ratings Rate this file 19 Downloads (last 30 days) File Size: 155 KB File ID: #29638 Version: 1.7
image thumbnail

contourfcmap: filled contour plot with precise colormap

by

Kelly Kearney (view profile)

 

06 Dec 2010 (Updated )

Creates a filled contour plot, with more precise control over colors than contourf.

| Watch this File

File Information
Description

Create a filled contour plot in Matlab, with better color-to-value clarity. See full description, along with examples, at https://github.com/kakearney/contourfcmap-pkg

Acknowledgements

This file inspired Cubehelix Colormaps: Beautiful, Distinct, Versatile!.

MATLAB release MATLAB 7.10 (R2010a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (16)
09 Apr 2015 Kelly Kearney

Kelly Kearney (view profile)

@Kyle,

Tracked that bug to line 211, where meshgrid-style input was being incorrectly classified as a vector (and therefore x/y weren't converted to vectors as they should be). Now fixed.

Comment only
08 Apr 2015 Kyle Wang

Found a possible bug at Line #468 in contourfcmap.m.

The code
F = griddedInterpolant({x,y},z');
shall be corrected as
F = griddedInterpolant(x',y',z');

Otherwise the built-in example won't run.

21 Mar 2015 Kelly Kearney

Kelly Kearney (view profile)

@Warwick

Thanks for pointing out this shortfall. I've modified the code so it now mostly supports irregular data grids (there are some edge cases involving NaNs that don't work so well, but most contourf-friendly data should be fine).

Comment only
20 Mar 2015 Warwick

In CONTOURF, "If X or Y [matrices] is irregularly spaced, then contourf calculates contours using a regularly spaced contour grid, and then transforms the data to X or Y."

Contourfcmap works fine when I try it with regular X and Y matrices, but not with Y as an irregular one. When I attempt to do so, then Contourfcmap returns this error messsage - 'Error using interp2>makegriddedinterp (line 237)
Input grid is not a valid MESHGRID.

Error in interp2 (line 136)
F = makegriddedinterp(X, Y, V, method,extrap);

Error in contourfcmap (line 389)
tmp = interp2(x,y,z,xyz{ii}(1,:), xyz{ii}(2,:));".

Is it possible to incorporate the capability for irregular Y matrix into contourfcmap? I have the feeling it might be a ridiculously massive amount of work.
Nevertheless, for regular grids, I find your function gives the desired superior graphic. So, thank you.

04 Mar 2015 Kelly Kearney

Kelly Kearney (view profile)

@ed

You're right... I recently updated the code to support NaNs in the data and didn't thoroughly test the new bit for older versions of Matlab. Just added a fix for that.

Comment only
03 Mar 2015 ed zaron

Hi Kelly,

I just downloaded and tried out this package but received this error when I tried the basic demo:
[x,y]=meshgrid(linspace(0,1,100));z=peaks(100);
contourfcmap(x,y,z,[-5 -3 -2:.5:2 35],jet(12),[.8 .8 .8], [.2 .2 .2], 'eastoutside')
[x,y] = meshgrid(linspace(0,1,100));

Undefined function or variable "isn".

Error in contourfcmap (line 344)
elseif isn(ip)

I am running R2012b (8.0.0.783) 64-bit (glnxa64).

The concept of the package looks great; I'm sure it is a version incompatibility or typo in the latest update.

All the best,

Ed

Comment only
02 Aug 2014 Kelly Kearney

Kelly Kearney (view profile)

@Carla,

Your x, y, and z data need to formatted in the same way as for the native contourf function, so you'll need to grid your data (not knowing the arrangement of the points in your vectors, I don't know whether you'd have to simply reshape, regrid, or use a scattered interpolant). Type help contourfcmap to see an example of use.

Comment only
30 Jul 2014 CARLA QUISPE

hello ,
I have a matriz of 3 colums (x,y,z), how I should use the code to run the program. what of the three files I must to run firts
thanks a lot!

04 Mar 2013 Jan

Jan (view profile)

Superb function, thanks.

Comment only
15 Jan 2013 Franzi

Franzi (view profile)

exactly what I needed

30 Nov 2012 peter

peter (view profile)

great submission, thanks a lot

26 Jun 2012 Kelly Kearney

Kelly Kearney (view profile)

@Earle Wilson,

Both saturated low and high values should be colored by the colors defined by the 'lo' and 'hi' inputs, respectively; by default these are white, but you can set them to be the same as the first and last cmap values if you want a saturated effect. If you see a different result please send me an example and I'll look into it.

Comment only
10 May 2012 Earle Wilson

great function! This saved me many hours of working around all the bugs in contourf.

The only (minor) short coming is that this function doesn't deal with saturated low values. Eg. if you enter:
contourfcmap(x,y,z,clev,cmap,lo,hi)
and there are values in z < min(clev), they will be plotted as white spaces. This is an issue with contourf really, which I won't get into here. An easy fix is set all values in z outside the clev limits to min(clev) or max(clev). Eg.
toohigh = z>max(clev); z(toohigh) = max(clev);
loolow = z<min(clev); z(toolow) = min(clev);

19 Oct 2011 Kelly Kearney

Kelly Kearney (view profile)

Added minmax subfunction into main code (overlooked this dependency on a simple helper function in previous upload). Thanks, Karin and Aurelien, for pointing out that mistake.

Comment only
18 Oct 2011 Aurelien Queffurust

Hi,
I wanted to test your code but:
the minmax function which is required by your code is not shipped .

Another remark:
You have forgotten a bracket in the given example in the header of M-file:
[x,y] = meshgrid(linspace(0,1,100)
should be:
[x,y] = meshgrid(linspace(0,1,100))

Now waiting for minmax.m before rating.

Thanks,

Aurélien

Comment only
09 May 2011 Tjaart de Wit

Great function! Thanks

Updates
07 Dec 2010 1.1

minor grammatical fix in description

19 Oct 2011 1.2

Fixed accidental omission of helper function in colorbar generation (minmax). Also corrected minor typo in example and added more informative example image.

30 Nov 2012 1.3

Fixed bug where new colorbar stole focus from axis.

23 Jul 2014 1.4

-Rewritten for R2014b, no longer relies on contourf object
-Added option to display all color levels evenly on the colorbar, regardless of value

03 Oct 2014 1.5

Corrected a bug in polygon generation where corner points of patches were out of order.

15 Dec 2014 1.6

Linked to GitHub repository

10 Apr 2015 1.7

Small update to description, pointing reader to github for readme.

Contact us