SourceForge logo
SourceForge logo
Menu

Re: [Matplotlib-users] masking values in quiver plot

From: Eric F. <ef...@ha...> - 2008年08月22日 19:32:19
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
> 

View entire thread

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /