pcolor with non-integer axes?

I have bogus values I don’t want to display in a gridded data set (regions of non-convergence, for example). pcolor does exactly what I want with a masked array, except the X and Y arguments must be integer arrays (as far as I can tell) and my data X and Y points are not integer arrays. An approximation of what is happening goes like:

x = linspace( 0, pi, 100)
y = linspace( -pi/2, pi/2, 30)
ev = custom_func( x, y)
print sum( isnan( ev))
12 (or whatever)

ev_m = ma.mask_where( isnan( ev), ev)
pcolor( x, y, ev_m) <-- this will fail, with an error like “need more than one value to unpack” which I think is caused by the non-integer nature of x, y.

Any suggestions for how can I can address this? My preference is to use pcolor, because of the transparency. I am not a fan of the scipy discussion regarding user-driven normalization “sentinels” to catch the bogus values. Masked arrays seem so much more flexible.

-Park

Pcolor accepts non-integer values of X and Y, so I don't know what the problem is. Please post a minimal but complete script that illustrates the error, and say what version of mpl you are using. With moderately recent versions, using masked arrays should work fine.

Eric

Park Hays wrote:

···

I have bogus values I don't want to display in a gridded data set (regions of non-convergence, for example). pcolor does exactly what I want with a masked array, except the X and Y arguments must be integer arrays (as far as I can tell) and my data X and Y points are not integer arrays. An approximation of what is happening goes like:

x = linspace( 0, pi, 100)
y = linspace( -pi/2, pi/2, 30)
ev = custom_func( x, y)
print sum( isnan( ev))
12 (or whatever)

ev_m = ma.mask_where( isnan( ev), ev)
pcolor( x, y, ev_m) <-- this will fail, with an error like "need more than one value to unpack" which I think is caused by the non-integer nature of x, y.

Any suggestions for how can I can address this? My preference is to use pcolor, because of the transparency. I am not a fan of the scipy discussion regarding user-driven normalization "sentinels" to catch the bogus values. Masked arrays seem so much more flexible.

-Park

------------------------------------------------------------------------

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options

Eric,

Python 2.5 (precompiled binary)
SciPy 0.5.2 (precompiled binary)
matplotlib 0.8737 (win32-py2.5 precompiled binary)
and if it matters I’m running in iPython for all this work.

The script is:

···

from scipy import *
from pylab import *
import matplotlib.numerix.ma as ma

N = 10

y = linspace(0, pi, N)
x = linspace(0, pi, N)
z = randn( N, N)

zm = ma.masked_where( z > 0.3, z)

pcolor( x, y, zm)


and the result I get is:


In [11]: execfile(‘pcolor_issue.py’)


<type ‘exceptions.ValueError’> Traceback (most recent call last)

C:\Documents and Settings\phays\My Documents\NDS\PDOP<ipython console> in ()

C:\Documents and Settings\phays\My Documents\NDS\PDOP\pcolor_issue.py in ()

  7 x = linspace(0, pi, N)
  8 z = randn( N, N)
  9 zm = ma.masked_where( z > 0.3, z)
 10

—> 11 pcolor( x, y, z)

C:\apps\py\lib\site-packages\matplotlib\pylab.py in pcolor(*args, **kwargs)

1941 hold(h)
1942 try:
→ 1943 ret = gca().pcolor(*args, **kwargs)
1944 draw_if_interactive()
1945 except:

C:\apps\py\lib\site-packages\matplotlib\axes.py in pcolor(self, *args, **kwargs)

3788 raise TypeError, ‘Illegal arguments to pcolor; see help(pcolor)’
3789
→ 3790 Nx, Ny = X.shape
3791
3792 # convert to MA, if necessary.

<type ’
exceptions.ValueError’>: need more than 1 value to unpack

On 3/29/07, Eric Firing <efiring@…202… > wrote:

Pcolor accepts non-integer values of X and Y, so I don’t know what the

problem is. Please post a minimal but complete script that illustrates
the error, and say what version of mpl you are using. With moderately
recent versions, using masked arrays should work fine.

Eric

Park Hays wrote:

I have bogus values I don’t want to display in a gridded data set
(regions of non-convergence, for example). pcolor does exactly what I
want with a masked array, except the X and Y arguments must be integer

arrays (as far as I can tell) and my data X and Y points are not integer
arrays. An approximation of what is happening goes like:

x = linspace( 0, pi, 100)
y = linspace( -pi/2, pi/2, 30)

ev = custom_func( x, y)
print sum( isnan( ev))
12 (or whatever)

ev_m = ma.mask_where( isnan( ev), ev)
pcolor( x, y, ev_m) ← this will fail, with an error like "need more

than one value to unpack" which I think is caused by the non-integer
nature of x, y.

Any suggestions for how can I can address this? My preference is to use
pcolor, because of the transparency. I am not a fan of the scipy

discussion regarding user-driven normalization “sentinels” to catch the
bogus values. Masked arrays seem so much more flexible.

-Park