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

Reply via email to