Keep plotting window open in Matplotlib

Solution 1:

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.

Solution 2:

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