Ryan May wrote: > On Fri, Feb 13, 2009 at 12:08 PM, <jason-s...@creativetrax.com > <mailto:jason-s...@creativetrax.com>> wrote: > > > A student of mine recently noticed that sometimes, quiver plots were > coming up empty (using the plot_vector_field function from Sage, which > passes everything on to quiver). Upon investigation, we saw that some > of the array entries passed in were infinity because of where we > happened to evaluate the function. It was relatively easy to correct in > our case (change the evaluation to miss the bad point), but is there a > better way to handle this? Can this be considered a bug in quiver (i.e., > returning a blank plot when one of the vectors has an infinite > coordinate?). > > Here is some example code illustrating the problem: > > > import pylab > import numpy > step=1 > X,Y = numpy.meshgrid( > numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) > U = 1/X > V = Y > pylab.figure() > Q = pylab.quiver( X,Y,U, V) > pylab.savefig("test.png") > > When you change step to something that avoids an evaluation at x=0 (say, > step=0.13), you get a nice plot. > > Is this something that we should be preprocessing in Sage before calling > quiver, masking those "bad" points or something? I haven't used masking > before, but I'd like to fix Sage's plot_vector_field function to return > something sensible, even when the function happens to be infinite at one > of the points. > > > I'm not sure why quiver does not plot any arrows in that case, but it's > also easy enough to mask out the values yourself: > > U = 1/X > U = numpy.ma.array(U, mask=numpy.isinf(U)) > V = Y > V = numpy.ma.array(V, mask=numpy.isinf(V)) > > You can also catch NaN values by using ~numpy.isfinite() instead of > numpy.isinf().
This is a good use case for numpy.ma.masked_invalid: In [2]:numpy.ma.masked_invalid? Type: function Base Class: <type 'function'> String Form: <function masked_invalid at 0xb62bccdc> Namespace: Interactive File: /usr/local/lib/python2.5/site-packages/numpy/ma/core.py Definition: numpy.ma.masked_invalid(a, copy=True) Docstring: Mask the array for invalid values (NaNs or infs). Any preexisting mask is conserved. Eric > > Ryan > > -- > Ryan May > Graduate Research Assistant > School of Meteorology > University of Oklahoma > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA > -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise > -Strategies to boost innovation and cut costs with open source participation > -Receive a $600 discount off the registration fee with the source code: SFAD > http://p.sf.net/sfu/XcvMzF8H > > > ------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users