Blank plots using plotting submodules

Hello all,

I have a python module that requires making about 24 different kinds of plots, and to keep things tidy I put them all in different modules, which I then import.

All the import calls are at the head of the top module. There is one plotting call inside a while loop, and it is returning blank plots saved in the proper location. Blank meaning no axes, so it is a totally empty .png file. After the loop, the first plot called is being saved, but all the subsequent plots are saving as blank. I begin every plotting module with matplotlib.pyplot.clf() and then write out the individual plotting commands.

This worked fine when everything was in one gigantic module, but I am at a loss for why it has stopped working once I put everything into submodules.

Thanks for your help,

Stephen D. Webb
Associate Research Scientist
Tech-X Corporation

http://www.txcorp.com

e: swebb@…1338…
5621 Arapahoe Ave. Suite A
Boulder, CO 80303 USA

Hello all,

I have a python module that requires making about 24 different kinds of
plots, and to keep things tidy I put them all in different modules,
which I then import.

All the import calls are at the head of the top module. There is one
plotting call inside a while loop, and it is returning blank plots saved
in the proper location. Blank meaning no axes, so it is a totally empty
.png file. After the loop, the first plot called is being saved, but all
the subsequent plots are saving as blank. I begin every plotting module
with matplotlib.pyplot.clf() and then write out the individual plotting
commands.

This worked fine when everything was in one gigantic module, but I am at
a loss for why it has stopped working once I put everything into submodules.

One way or another, I think you are plotting in one figure, and then saving another (empty) figure. This type of thing typically comes from mixing pyplot state-machine style with object style. It has happened to me. The problem is that pyplot commands create a new figure if they don't find an existing "current figure". The easiest way to solve this problem is to use only the minimal pyplot commands, and do everything else with explicit references to figures and axes.

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
fig.savefig("test.png")
plt.close(fig)

If you use the pattern above, then it is always clear where the plotting is going and what is being written out. You are probably better off creating a figure when you are ready to plot in it, and closing it when finished, rather than trying to recycle it by clearing it. There will be very little difference in the time required.

Eric

···

On 12/30/2011 11:41 AM, Stephen Webb wrote:

Thanks for your help,

Stephen D. Webb
Associate Research Scientist
Tech-X Corporation
http://www.txcorp.com

e: swebb@...1338...
5621 Arapahoe Ave. Suite A
Boulder, CO 80303 USA

------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create
new or port existing apps to sell to consumers worldwide. Explore the
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users