[Matplotlib-users] Plot to display or file in the same script?

2011-01-26 Thread David Perlman
I'm trying to make a simple utility for doing a quick check of some data 
(electrophysiology recordings from our fMRI scanner lab).  I want it to be 
foolproof as much as possible, so I was trying to figure out how to write a 
script that would try to plot to the display, then if that didn't work, to save 
it to a file instead (preferably as pdf, but I could live with png if that was 
the only option.)

I've been searching the documentation and code examples for a while, and all I 
can find seems to suggest that the choice of display vs. file is predetermined 
at the very beginning by the choice of backend.  I suppose that would mean I'd 
have to put the whole thing inside a try block, then if that didn't work, start 
over from scratch with a different backend and build the plot again.  I was 
hoping to find a way to build the plot, then just try to show it or something 
like that, and if that failed, then save it instead.  But so far I have not 
been able to figure out such a thing.  So I would appreciate any help!  Thanks 
very much!


--
-dave
Pseudo-colored pictures of a person's brain lighting up are 
undoubtedly more persuasive than a pattern of squiggles produced by a
polygraph.  That could be a big problem if the goal is to get to the
truth.  -Dr. Steven Hyman, Harvard




--
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


Re: [Matplotlib-users] Plot to display or file in the same script?

2011-01-26 Thread Benjamin Root
On Wednesday, January 26, 2011, David Perlman dperl...@wisc.edu wrote:
 I'm trying to make a simple utility for doing a quick check of some data 
 (electrophysiology recordings from our fMRI scanner lab).  I want it to be 
 foolproof as much as possible, so I was trying to figure out how to write a 
 script that would try to plot to the display, then if that didn't work, to 
 save it to a file instead (preferably as pdf, but I could live with png if 
 that was the only option.)

 I've been searching the documentation and code examples for a while, and all 
 I can find seems to suggest that the choice of display vs. file is 
 predetermined at the very beginning by the choice of backend.  I suppose that 
 would mean I'd have to put the whole thing inside a try block, then if that 
 didn't work, start over from scratch with a different backend and build the 
 plot again.  I was hoping to find a way to build the plot, then just try to 
 show it or something like that, and if that failed, then save it instead.  
 But so far I have not been able to figure out such a thing.  So I would 
 appreciate any help!  Thanks very much!



You can always put the show call in a try block and do a savefig if
the show fails.  I don't know where you get the idea that you have to
do one or the other...

Unless you are talking about the issue where the closing of a figure
window would cause you to lose the figure data?  In which case, you
should be fine catching the show and doing the savefigg because the
close event never occurred. However, you might get messy this way with
a blank figure window...

To be foolproof I would just always save first and then attempt to
show.  If the show was successful, you can delete the saved figure.

Sorry for the rambling, but those are my thoughts on it.

Ben Root

--
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


Re: [Matplotlib-users] Plot to display or file in the same script?

2011-01-26 Thread David Perlman
The problem is that if no display is available, the error gets raised on the 
point where I try to create a new figure, long before getting to show(), so I 
can't do anything at all.  Here's what it looks like when I log in without a 
display available:
 import matplotlib.pyplot as plt
 plt.figure()
Traceback (most recent call last):
  File stdin, line 1, in module
  File 
/usr/local/Python/Versions/2.6.5/lib/python2.6/site-packages/matplotlib/pyplot.py,
 line 270, in figure
**kwargs)
  File 
/usr/local/Python/Versions/2.6.5/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py,
 line 83, in new_figure_manager
window = Tk.Tk()
  File /usr/local/Python/Versions/2.6.5/lib/python2.6/lib-tk/Tkinter.py, line 
1643, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, 
wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable


I can do this, which is widely recommended:
 import matplotlib
 matplotlib.use('Agg')
 import matplotlib.pyplot as plt
 fig=plt.figure()
 fig.save_fig('test.png')

But as far as I can tell from searching, once you do this, there is no way to 
display to the screen.  Unless there is a very clever trick that I don't know 
about...  which I am asking for here...  :-)





On Jan 26, 2011, at 11:16 PM, Benjamin Root wrote:

 On Wednesday, January 26, 2011, David Perlman dperl...@wisc.edu wrote:
 I'm trying to make a simple utility for doing a quick check of some data 
 (electrophysiology recordings from our fMRI scanner lab).  I want it to be 
 foolproof as much as possible, so I was trying to figure out how to write a 
 script that would try to plot to the display, then if that didn't work, to 
 save it to a file instead (preferably as pdf, but I could live with png if 
 that was the only option.)
 
 I've been searching the documentation and code examples for a while, and all 
 I can find seems to suggest that the choice of display vs. file is 
 predetermined at the very beginning by the choice of backend.  I suppose 
 that would mean I'd have to put the whole thing inside a try block, then if 
 that didn't work, start over from scratch with a different backend and build 
 the plot again.  I was hoping to find a way to build the plot, then just try 
 to show it or something like that, and if that failed, then save it 
 instead.  But so far I have not been able to figure out such a thing.  So I 
 would appreciate any help!  Thanks very much!
 
 
 
 You can always put the show call in a try block and do a savefig if
 the show fails.  I don't know where you get the idea that you have to
 do one or the other...
 
 Unless you are talking about the issue where the closing of a figure
 window would cause you to lose the figure data?  In which case, you
 should be fine catching the show and doing the savefigg because the
 close event never occurred. However, you might get messy this way with
 a blank figure window...
 
 To be foolproof I would just always save first and then attempt to
 show.  If the show was successful, you can delete the saved figure.
 
 Sorry for the rambling, but those are my thoughts on it.
 
 Ben Root

--
-dave
Pseudo-colored pictures of a person's brain lighting up are 
undoubtedly more persuasive than a pattern of squiggles produced by a
polygraph.  That could be a big problem if the goal is to get to the
truth.  -Dr. Steven Hyman, Harvard




--
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