File Exchange

image thumbnail

sanePColor(varargin​)

version 1.2.0.0 (5.03 KB) by Jeremy Manning
Wrapper for pcolor that behaves similarly to imagesc. Squash OS X Preview's "blurry image" bug!

1 Download

Updated 06 Oct 2016

View Version History

View License

sanePColor simple wrapper for pcolor

Unlike the built-in pcolor command, this function does not "cut off" the
last row and column of the input matrix. In this way, sanePColor is
intended to be as easy to use as imagesc, but allows the user to specify
the x and y coordinates of each cell if desired. This function is also
useful as an alternative means of generating images to print to PDF that
are compatible with OS X's "Preview" PDF viewer (imagesc images appear
"blurred" when printing to a PDF as a vector graphic and viewed using
Preview).

NOTE: The imagesc function assumes that each entry in a matrix gets the
corresponding coordinate in 2-d space. For example, entry (2,3) in the
matrix is assigned to the coordinate with x = 3, y = 2 when using
imagesc. The pcolor function assumes that entries correspond to *edges*.
So entry (2,3) in a matrix corresponds to the value between 2 and 3
(along the x-axis) and between 1 and 2 (along the y-axis). This is why
one row and one column are cut off when using pcolor. sanePColor
behaves like imagesc (i.e. does not cut off data), but uses the "edge
assignment" data representation required by pcolor. sanePColor uses
linear or logarithmic interpolation to infer the edges automatically.

Usage: p = sanePColor([x,y],z,[logx],[logy]);

INPUTS:

x: an array of sorted x values. can also specify a min and max x value.
these values correspond to columns of z. [IF THIS ARGUMENT IS USED,
MUST ALSO SPECIFY Y VALUES.]

y: an array of sorted y values. can also specify a min and max y value.
these values correspond to rows of z. [IF THIS ARGUMENT IS USED,
MUST ALSO SPECIFY X VALUES.]

z: a 2d matrix of values. this matrix determines the color at each
point.

logx: if this optional argument is set to true, the x-axis will plotted
in log scale (similar to semilogx).

logy: if this optional argument is set to true, the y-axis will plotted
in log scale (similar to semilogy).

OUTPUTS:

p: a handle to the resulting pcolor image.

EXAMPLE:

m = membrane;
p = sanePColor(m);

SEE ALSO: pcolor, image, imagesc, semilogx, semilogy, loglog, padarray

AUTHOR: JEREMY R. MANNING
CONTACT: manning3@princeton.edu

Cite As

Jeremy Manning (2020). sanePColor(varargin) (https://www.mathworks.com/matlabcentral/fileexchange/35601-sanepcolor-varargin), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (13)

Chris Panuski

Jeremy Manning

Thanks Benjamin! I've updated the code as suggested and have credited you accordingly. Legionmaster, irregular axis spacing should now work. Re: the grid spacing, flat shading is an intentional design decision. You can call "shading faceted" after using this function to add the grid back.

Benjamin Strom

Modification for nonlinear axes:
Change the linexpand function contents (line 145) to read

function[ey] = linexpand(y)
ey = [y,0];
ey(end) = 2*ey(end-1) - ey(end-2);
ey = ey - (ey(end-1) - ey(end-2))/2;

Modification for leaving the grid in:
Delete line 14 which reads: shading flat;

NOTE: Modifications have not been tested extensively yet.

legionmaster

pcolor has a possibility of nonlinear axis, that is if there is a x=[0 1 1.9 2 2.1 3 4 5], there will be wider and shorter rectangles. Here all rectangles are the same.
Moreover, grid is not working.

FTil

Nitin

Seb Biass

Hey, really cool code. I am trying to input matrices of X and Y to mimic the example of pseudo-polar coordinates shown as an example of the help of pcolor. Is that possible somehow with your code?
Thanks!
S

Jonathan C. Lansey

Really nicely done function with a hilarious name to avenge for the frustration of using pcolor.

David Wang

x and y have to be row vectors. To be more flexible, replace in the linexpand function

x = 1:length(y);
p = polyfit(1:length(y),y,1);

with

x = reshape(1:length(y),[size(y)]);
p = polyfit(x,y,1);

Jeremy Manning

Hi Jette, thanks for your feedback. I have corrected the issue you described (the new version should appear shortly).

Jette

The handling of the axes is not correct as you can see using the Data Cursor. This also can yield strange ticks.

However, it solves the problem that at least all data of a matrix is shown.

Jette

avlas

very nice, I was dealing with this issue in pcolor

thanks a lot

MATLAB Release Compatibility
Created with R2012a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!