On 01/27/2011 09:21 AM, Daniel Fulger wrote: >> >> Dear all, >> >> contourset = pyplot.contour(..) >> >> calculates the contourset but also grabs whatever figure is currently >> active *somewhere* in the entire code >> and whichever scope it was created. The contours are plotted into it. >> >> While I could possibly live with that, I would really like to >> suppress any plotting and grabbig of focus. Only the contourset >> should be calculated. >> >> I can't find anything that describes this. Everybody wants the plot, >> not me. >> >> I would like to avoid hte workaround to ask for the currently active >> figure (if!! there is one at all), store the number, and later return >> focus. Is there no switch parameter (in pyplot or for contour at >> least) that turns plotting off? >> >> Regards >> Daniel >> >> >>> >>> Hi Daniel, >>> >>> I'm not sure if this gets at what you're asking for, but if >>> you just want the contours plotted on a figure other than the >>> currently active one, grab a handle to some other axes and call >>> contour from the axes itself (the parameters are the same). >>> Here's what I mean: >>> >>> ----------- >>> f,ax =plt.subplots(1,1) #grab handles to figure and axes >>> # or, if you're using an older version of matplotlib, do: >>> # f=plt.figure();ax=plt.subplot(1,1,1) >>> >>> >>> f2,ax2 =plt.subplots(1,1) # "f" no longer active figure >>> ... >>> contourset = ax.contour(...) # draw to the old figure "f" >>> ----------- >>> >>> You can read more about the difference between using pyplot and >>> using the object-oriented api here: >>> >>> http://matplotlib.sourceforge.net/faq/usage_faq.html >>> >>> On the other hand, if you just want the contour to not show up, >>> you can pass it alpha=0.0 to make it completely transparent and >>> invisible (but it's still there) >>> >>> contourset = pyplot.contour(.., alpha=0.0) >>> # later call contourset.set_alpha(1.0) to make visible again >>> >>> best, >>> -- >>> Paul Ivanov > > Dear Paul, > > no, I would like to suppress plotting entirely, avoid changing of > active figure and avoid handling figures or axis completely. > I m only interested in the contourset. I wonder if my post was > somehow sloppy. > > Yes, there are work-arounds like creating a dummy figure, similar to > your suggestion, and return focus to > the previously active figure. But plotting takes time and memory, is > not needed and requires several code lines. Once might be ok but > speed and memory is important. > Plotting with alpha=0 still requires figure and axis handling. > > So how can I switch off all figure and axis related actions and > savely call contourset = contour(x,y,...) that does nothing else than > return the contours?
Look at contour.py, specifically QuadCountourSet._process_args. You will see the call to _cntr.Cntr. That is the core class, implemented in extension code. The contour generation is in the method _get_allsegs_and_allkinds, via the call to the Cntr.trace() method. You will have to put together your own function to instantiate Cntr and call Cntr.trace for each level. A major refactoring could be done to separate the calculation from the plotting, maybe by making the ContourSet into a compound artist and putting the drawing into a draw() method instead of having it called in the __init__() method. Eric > > > Regards > Daniel > ------------------------------------------------------------------------------ Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! Finally, a world-class log management solution at an even better price-free! Download using promo code Free_Logger_4_Dev2Dev. Offer expires February 28th, so secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsight-sfd2d _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users