pcolor and

Matplotlib users,

I've been using pcolor and pcolormesh to plot results from the NCEP Reanalysis. I've noticed that the plotted values are slightly offset. Googling around I see that matlab has this quality, which I assume matplotlib inherited.

     # If your georeferenced image is in lat/long coordinates (i.e. each data row is along a line of
       constant latitude, each column a line of equal longitude), ... you MUST remember to offset your
       coordinates by one-half of the pixel spacing. This is because of the different behaviors of
       p_color and image when given the same data.
  1. image will center the drawn (i,j) pixel on the (i,j)th entry of the X/Y matrices.
      2. p_color with shading flat will draw a panel between the (i,j),(i+1,j),(i+1,j+1),(i,j+1)
         coordinates of the X/Y matrices with a color corresponding to the data value at (i,j). Thus
         everything will appear shifted by one half a pixel spacing.

and
  % Since the grid is rectangluar in lat/long (i.e. not
  % really a projection at all, althouhg it is included in
  % m_map under the name 'equidistant cyldindrical'), we
  % don't want to use the 'image' technique. Instead...
  % Create a grid, offsetting by half a grid point to account
  % for the flat pcolor
  [Plg,Plt]=meshgrid(Plon-0.25,Plat+0.25);

The data I'm using uses polar grids centered on +-90.0 which give a latitude array as such
[-90. -87.5 -85. -82.5 -80. -77.5 -75. -72.5 -70. -67.5 -65. -62.5
  -60. -57.5 -55. -52.5 -50. -47.5 -45. -42.5 -40. -37.5 -35. -32.5
  -30. -27.5 -25. -22.5 -20. -17.5 -15. -12.5 -10. -7.5 -5. -2.5
    0. 2.5 5. 7.5 10. 12.5 15. 17.5 20. 22.5 25. 27.5
   30. 32.5 35. 37.5 40. 42.5 45. 47.5 50. 52.5 55. 57.5
   60. 62.5 65. 67.5 70. 72.5 75. 77.5 80. 82.5 85. 87.5
   90. ]

Is there a simple way to "shift" this data so my global plots look correct? So far my results result in an "empty" line along the south pole or I end up with an extra latitude which pcolor doesn't like.

Thanks,

Mike

mbauer wrote:

Matplotlib users,

I've been using pcolor and pcolormesh to plot results from the NCEP Reanalysis. I've noticed that the plotted values are slightly offset. Googling around I see that matlab has this quality, which I assume matplotlib inherited.

     # If your georeferenced image is in lat/long coordinates (i.e. each data row is along a line of
       constant latitude, each column a line of equal longitude), ... you MUST remember to offset your
       coordinates by one-half of the pixel spacing. This is because of the different behaviors of
       p_color and image when given the same data.
  1. image will center the drawn (i,j) pixel on the (i,j)th entry of the X/Y matrices.
      2. p_color with shading flat will draw a panel between the (i,j), (i+1,j),(i+1,j+1),(i,j+1)
         coordinates of the X/Y matrices with a color corresponding to the data value at (i,j). Thus
         everything will appear shifted by one half a pixel spacing.

and
  % Since the grid is rectangluar in lat/long (i.e. not
  % really a projection at all, althouhg it is included in
  % m_map under the name 'equidistant cyldindrical'), we
  % don't want to use the 'image' technique. Instead...
  % Create a grid, offsetting by half a grid point to account
  % for the flat pcolor
  [Plg,Plt]=meshgrid(Plon-0.25,Plat+0.25);

The data I'm using uses polar grids centered on +-90.0 which give a latitude array as such
[-90. -87.5 -85. -82.5 -80. -77.5 -75. -72.5 -70. -67.5 -65. -62.5
  -60. -57.5 -55. -52.5 -50. -47.5 -45. -42.5 -40. -37.5 -35. -32.5
  -30. -27.5 -25. -22.5 -20. -17.5 -15. -12.5 -10. -7.5 -5. -2.5
    0. 2.5 5. 7.5 10. 12.5 15. 17.5 20. 22.5 25. 27.5
   30. 32.5 35. 37.5 40. 42.5 45. 47.5 50. 52.5 55. 57.5
   60. 62.5 65. 67.5 70. 72.5 75. 77.5 80. 82.5 85. 87.5
   90. ]

Is there a simple way to "shift" this data so my global plots look correct? So far my results result in an "empty" line along the south pole or I end up with an extra latitude which pcolor doesn't like.

Thanks,

Mike

Mike: From the pcolor docstring:

X and Y, if given, specify the (x,y) coordinates of the colored
    quadrilaterals; the quadrilateral for C[i,j] has corners at
    (X[i,j],Y[i,j]), (X[i,j+1],Y[i,j+1]), (X[i+1,j],Y[i+1,j]),
    (X[i+1,j+1],Y[i+1,j+1]). Ideally the dimensions of X and Y
    should be one greater than those of C; if the dimensions are the
    same, then the last row and column of C will be ignored.

So it may be easier to modify your data (by averaging adjacent values to they reflect the mid-point of each grid box) than to modify the vertices.

-Jeff

···

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-124
Boulder, CO, USA 80303-3328 Web : Jeffrey S. Whitaker: NOAA Physical Sciences Laboratory