Shannon Jaeger wrote:
Hi Ryan and Eric,
I work on software that plots bits and pieces of radio astronomy
data. We've run into similar issues and will be running into
even more related to performance.
We have datasets that have millions of points, potentially into
the billions in the not so distant future. Sometimes the way
the users have choosen what bits and pieces to plot we need to
break up the data into chunks and plot each chunk separately.
To further complicate we allow them to overplot other large plots
Anyway I'm very interested in learning more about how to use the
quadmesh code and using it as well. Although I haven't played
much with the source code at all, any advice on how to expose this
at the API level would be appreciated. If modifying the backend
is all that's needed we've already done a bit of this to tailor
things to our needs.
I'm not sure what you mean by "expose this at the API level"; quadmesh is already exposed via the pcolormesh and pcolorfast axes methods. Do you mean via a pyplot/pylab wrapper? This can be done easily, but my intention was to work out the kinks in the pcolorfast method API before wrapping it in pyplot, and possibly deprecate pcolormesh on the grounds that its functionality are included in pcolorfast. Instead of a proliferation of variations on this type of plot, I was hoping to consolidate everything into no more than two alternatives: the original pcolor, which can draw outlines around the boxes and draws only unmasked boxes; and pcolorfast, which omits those pesky outlines, and uses the fastest available algorithm for the type of data that are provided.
Thanks for any suggestions in advance.
Atacama Large Millimetre Array
Dept. of Physics & Astronomy
University of Calgary,
Calgary, AB, Canada
ph: +1 403 210 8495
On Thu, March 13, 2008 11:37 am, Eric Firing said:
The pcolor implementation is fundamentally unsuited to large arrays.
Therefore I made the pcolorfast axes method, which tries to use the
fastest available Agg extension code, depending on the characteristics
of the spatial grid. If the grid is rectangular and regular in both
directions it uses a slight modification of the image code; if it is
rectangular but with irregular spacing, it uses the nonuniform image
code; and if it is not rectangular it uses the quadmesh code. It sounds
like what you need is the quadmesh version, which you can access either
via pcolormesh or pcolorfast. Neither is exposed via the pylab or
pyplot API at present; both are axes methods. The pcolorfast API also
may change slightly in the future; it probably needs a little more work.
The quadmesh code has problems with masked arrays in the released
version of mpl, but not in the svn version. It is *much* faster than
pcolor, but may not be fast enough for your needs.
If you are looking into what sounds like an OpenGL backend, or component
to a backend, then the place to start is still probably pcolormesh or
pcolorfast, not pcolor.
Ryan May wrote:
I've been poking around with pcolor, trying to see what makes it tick,
since its performance is biggest thing that drives me nuts about
matplotlib. I do pcolor plots of weather radar data with ~100000
polygons in them. Unfortunately, these polygons are at best trapezoids,
so I can't treat it as image data. With this data, pcolor takes ages to
zoom and pan, even on my new workstaion. My end goal is to be able to
use OpenGL to do some 2D rendering, since in my experience, this simply
flies at rendering such data for interactive analysis.
I noticed that when I run the pcolor_demo.py (using current SVN trunk),
29396 separate calls are registered to RendererGDK->draw_path to simply
draw the image the first time. Is there any reason why these can't be
batched up and passed in one block to the renderer? This would make
life easier in setting up OpenGL to render in one pass.
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
Matplotlib-devel mailing list