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

Reply via email to