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

Reply via email to