Jeff Whitaker wrote: > Eric Firing wrote: >> Jeff Whitaker wrote: >>> Michael Roettger wrote: >>>> Hi all, >>>> >>>> maybe I've misunderstood something concerning masking or quiver plots: >>>> I want to exclude some data from a quiver plot. Here's an example: >>>> >>>> --------------------8<---- >>>> import numpy as N >>>> import pylab as pl >>>> import matplotlib.numerix.ma as ma >>>> >>>> # prepare data >>>> X,Y = pl.meshgrid(range(5),range(5)) >>>> angles = pl.rand(5,5) >>>> U = N.cos(angles) >>>> V = N.sin(angles) >>>> >>>> # prepare mask >>>> M = N.zeros((5,5), dtype='bool') >>>> M[2,2] = True >>>> >>>> # apply mask >>>> Um = ma.masked_array(U,mask=M) >>>> Vm = ma.masked_array(V,mask=M) >>>> >>>> # plot >>>> pl.quiver(X,Y,Um,Vm) >>>> # pl.plot(range(5),Um[2],'x') >>>> >>>> pl.show() >>>> ---------------------->8---- >>>> >>>> Using the commented 'plot' command works as expected, but 'quiver' >>>> results in >>>> empty axes. If I take U,V instead of Um,Vm, the arrows are drawn .. >>>> What am I doing wrong or is there another way to exclude arrows from >>>> being >>>> plotted? >>>> >>>> Thank you in advance, >>>> >>>> Michael >>>> >>>> >>> >>> Michael: I've fixed this now in svn. If you don't want to update to >>> svn trunk, you can make this simple change in quiver.py >> >> Jeff, >> >> Thanks for the quick fix--it will help for now, and will work in most >> use cases, but it is not actually correct in general. The problem is >> that quiver supports input of changed values of U, V, and C on the >> existing X, Y grid, and these changed values can be masked arrays with >> different points masked. (See Quiver.set_UVC().) That is why I did not >> use delete_masked_points in the first place. Masked values used to be >> handled correctly; I suspect the bug is actually in collections, not >> in quiver itself. I can't track it down right now, but may be able to >> look at it over the weekend. >> >> Eric > > OK Eric - I figured you'd chime in when you got a chance. Let's > consider it a temporary workaround then. BTW: I updated the > quiver_demo.py example to test the masking.
Very useful, thank you. I have removed the workaround and made a more consistent repair to the masked array handling. The problem came in when PolyCollection was changed to automatically close the path by default. Eric > > > -Jeff >> >>> >>> --- lib/matplotlib/quiver.py (revision 6046) >>> +++ lib/matplotlib/quiver.py (working copy) >>> @@ -334,6 +334,12 @@ >>> def __init__(self, ax, *args, **kw): >>> self.ax = ax >>> X, Y, U, V, C = self._parse_args(*args) >>> + if C is not None: >>> + X, Y, U, V, C = >>> delete_masked_points(X.ravel(),Y.ravel(),U.ravel(), >>> + V.ravel(),C.ravel()) >>> + else: >>> + X, Y, U, V = >>> delete_masked_points(X.ravel(),Y.ravel(),U.ravel(), >>> + V.ravel()) >>> self.X = X >>> self.Y = Y >>> self.XY = np.hstack((X[:,np.newaxis], Y[:,np.newaxis])) >>> >>> >>> -Jeff >>> >> > > ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users