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