Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Keep plotting window open in Matplotlib

When writing scripts that use matplotlib, I temporally get an interactive graphing window when I run the script, which immediately goes away before I can view the plot. If I execute the same code interactively inside iPython, the graphing window stays open. How can I get matplotlib to keep a plot open once it is produces a graph when I run a script?

For example, I can save this plot, but I cannot display it with show():

from matplotlib import pyplot as plt import scipy as sp  x =  sp.arange(10) y =  sp.arange(10)  plt.plot(x,y) plt.show() 
like image 408
turtle Avatar asked Sep 10 '12 19:09

turtle


People also ask

Can you use matplotlib in idle?

Download the “Install Matplotlib (for PC). bat” file from my web site, and double-click it to run it. Test your installation. Start IDLE (Python 3.4 GUI – 32 bit), type “import matplotlib”, and confirm that this command completes without an error.

Is gnuplot better than matplotlib?

Matplotlib = ease of use, Gnuplot = (slightly better) performance. I know this post is old and answered but I was passing by and wanted to put my two cents. Here is my conclusion: if you have a not-so-big data set, you should use Matplotlib. It's easier and looks better.

Is PLT show () necessary?

Plotting from an IPython shell draw() . Using plt. show() in Matplotlib mode is not required.


2 Answers

According to the documentation, there's an experimental block parameter you can pass to plt.show(). Of course, if your version of matplotlib isn't new enough, it won't have this.

If you have this feature, you should be able to replace plt.show() with plt.show(block=True) to get your desired behavior.

like image 50
Sam Mussmann Avatar answered Sep 27 '22 19:09

Sam Mussmann


Old question, but more canonical answer (perhaps), since it uses only documented and not experimental features.

Before your script exits, enter non-interactive mode and show your figures. This can be done using plt.show() or plt.gcf().show(). Both will block:

plt.ioff() plt.show() 

OR

plt.ioff() plt.gcf().show() 

In both cases, the show function will not return until the figure is closed. The first case is to block on all figures, the second case is to block only until the one figure is closed.

You can even use the matplotlib.rc_context context manager to temporarily modify the interactive state in the middle of your program without changing anything else:

import matplotlib as mpl with mpl.rc_context(rc={'interactive': False}):     plt.show() 

OR

with mpl.rc_context(rc={'interactive': False}):     plt.gcf().show() 
like image 42
Mad Physicist Avatar answered Sep 27 '22 17:09

Mad Physicist