Matplotlib plots not showing up in Mac OSX?

I had the same problem, even I could see how a new application window was created and immediately disappeared.

Simple solution - just check if you have

# Assumes you have imported "matplotlib.pyplot" as "plt"
plt.show()

after the plot


I can verify this on my end as well. To fix, here's what I did

sudo port install py25-matplotlib +cairo+gtk2
sudo port install py26-matplotlib +cairo+gtk2

Also, we need to change the default backend to a GUI based one.

Edit the file ~/.matplotlib/matplotlibrc, and add:

backend: GTKCairo

Also, you can try the following, which may allow you to not need the GTK or Cairo backends. Edit ~/.matplotlib/matplotlibrc and add:

backend: MacOSX

With the port with those variants installed, this works as well, but it doesn't require X11.


By the way, the error that I saw was the following:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'Agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/Users/wlynch/.matplotlib/matplotlibrc') or with matplotlib.use()
(backend, matplotlib.matplotlib_fname()))

This is what worked for me. I just changed the import of Matplotlib

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

When you try

plt.savefig('myfilename.png')

instead of

plt.show()

does that save the correct image named myfilename.png in the current path?


After the plot simply add -

plt.show()

The reason this works is to do with interactive vs non-interactive mode. If the backend is opened in non-interactive mode, plt.show() is required at the end of the code chunk. You can check the status by calling plt.isinteractive() and toggle the status using plt.ion() and plt.ioff()