Pablo Romero wrote:
> Im experiencing very poor performance when using the 'quiver' function over 
> relatively large grids.
> Im using quiver to plot wind 'u,v' data over a lat/lon grid using basemap.
>  
> quiver performs decently over small lat/lon ranges, such as a bounding box of 
> lat(0-30),lon(-120- -100), but when I try to plot larger areas (i.e. the 
> entire globe), quiver causes a very large pause. through some debugging of 
> quiver.py, I narrowed down the performance lag to the "set_vertices" function 
> call within the "draw()" function in the quiver class. as a test, I printed 
> 'len(vert)' in order to see the vertice array length that was causing 
> problems...it seems that Im getting vertice counts in the high thousands, and 
> quiver seems to struggle with this. 
>  
> should quiver be able to easily handle such a large amount of vertices?

What version of matplotlib are you using, and on what platform?

How long is the pause, and for how many vectors?

I presume you are referring to the set_verts() method which is inherited 
from collections.PolyCollection.  It is using a list comprehension to 
loop over the vectors, making a path for each, so I would not expect it 
to be particularly quick; but whether it is unreasonable, or whether it 
can be sped up reasonably easily, I don't know.

>  
>  
> A secondary question:
> the method Im using to create my X,Y,U,V arrays is creating 
> 'larger-than-necessary' X,Y arrays; i.e., Im not plotting the U,V vectors at 
> each lat&lon point, Im 'skipping' over 'every-nth-point', so my U,V arrays 
> are equal in size to my X,Y arrays, but have many empty elements. 
>  
> Unfortunately, the array data is being imported from an external program 
> (named 'GRADS'), so I cannot prevent these arrays from being 'oversized' upon 
> their creation.
>  
> example:
> for a (10 degree lat)x(10 degree lon) area, I might have arrays like this:
>  
> X='[0,0.5,1.0,1.5,2.0,2.5,...10.0],[0,0.5,...10],...[0.0,0.5,...10.0]'
> Y='[0,0.5,1.0,1.5,2.0,2.5,...10.0],[0,0.5,...10],...[0.0,0.5,...10.0]'
> U='[--,--,0.40,--,--,0.15,...0.30],[--,--,0.25,--,--...,0.12],...[--,--,0.50,...10.0]'
> V='[--,--,0.30,--,--,0.25,...0.40],[--,--,0.25,--,--...,0.12],...[--,--,0.50,...10.0]'
>  
> these values are completely inaccurate and are meant just to illustrate the 
> fact that I have many 'skipped' values in my U,V arrays, and I have oversized 
> X,Y arrays that cover the 10x10 lat/lon grid...
>  
> So, what I want to do is create NEW X,Y,U,V arrays or remove elements from 
> these existing X,Y,U,V arrays, so that:
> 1) only valid, "non-empty" values will exist in my U,V arrays..and
> 2) the only values that exist in X,Y are those that correspond to valid 
> points in the U,V arrays...
>  
> Im not very experienced with python/matplotlib, so I dont know what would be 
> the best way to iterate over these 4 arrays and remove the empty invalid 
> elements (or copy the valid elements into new arrays). How can I go about 
> shortening these arrays?
>

Assuming your X, Y, U, V are all masked arrays or ndarrays of the same 
shape, you can use

from matplotlib.cbook import delete_masked_points

x,y,u,v = delete_masked_points(X.ravel(), Y.ravel(). U.ravel(), V.ravel())

The Barbs class in quiver.py uses this function; Quiver could be 
modified to use it, with the loss of a bit of functionality that I 
suspect no one is using anyway.

All the .ravel() method calls are needed only if the arrays are 2-D or 
higher.


> Im hoping that with less points in my X,Y arrays, that quiver will perform 
> faster since it isnt wasting time trying to process X,Y points where U,V are 
> empty).
>

Let us know how much difference it makes, and tell us what the initial 
and modified number of vectors is.

Eric

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to