pyplot: Extract contourset without plotting

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

Daniel Fulger, on 2011-01-27 18:16, 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?

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
314 address only used for lists, off-list direct email at:
http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7

I believe he would rather call the core function that contour uses to
do the heavy lifting. This was something that one can do in matlab,
btw. I don't have access to the source right now. What does contour
call to perform this calculation?

Ben Root

···

On Thursday, January 27, 2011, Paul Ivanov <pivanov314@...287...> wrote:

Daniel Fulger, on 2011-01-27 18:16, 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?

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
314 address only used for lists, off-list direct email at:
http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7