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 > > --- 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