Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib plots aren't shown when running file from bash terminal

Plots are normally shown when I run files from the ipython shell or from an ipython notebook, but they don't show up when I run the file from a bash terminal -- everything else works fine when is run from a bash terminal.

Sample python script (trial.py):

import matplotlib.pyplot as plt

print 'please, show my graph'

plt.plot([1,2,3], [1,2,3])

plt.show()

This is what I get (plot doesn't show up):

[~/Desktop]$ python trial.py
please, show my graph
[~/Desktop]$

If I do

import matplotlib
matplotlib.use('TkAgg')

before importing pyplot, then a window opens and closes immediately when I run it from the terminal.

I've tried different ways of importing modules without success:

import matplotlib.pyplot as plt
import matplotlib.pylab as plt
from matplotlib import pyplot as plt
from matplotlib import pylab as plt

I have the plt.show() function in my file.

Do you know how I can fix it?

Some info about versions and installation:

I'm on a mac OSX 10.11.3.

In [61]: print matplotlib.__file__
/usr/local/lib/python2.7/site-packages/matplotlib/__init__.pyc

In [62]: print matplotlib.__version__
1.4.2

In [64]: print sys.version
2.7.9 (default, Apr  7 2015, 07:58:25)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

In [65]: matplotlib.get_backend()
Out[65]: u'MacOSX'
like image 954
drake Avatar asked Mar 28 '16 19:03

drake


People also ask

Why is matplotlib not showing?

The issue actually stems from the matplotlib backend not being properly set, or from a missing dependency when compiling and installing matplotlib.

Does matplotlib work in terminal?

The best use of Matplotlib differs depending on how you are using it; roughly, the three applicable contexts are using Matplotlib in a script, in an IPython terminal, or in an IPython notebook.

Why is matplotlib not working?

Occasionally, problems with Matplotlib can be solved with a clean installation of the package. In order to fully remove an installed Matplotlib: Delete the caches from your Matplotlib configuration directory. Delete any Matplotlib directories or eggs from your installation directory.


1 Answers

You need to add matplotlib.pyplot.show() in your code to show plots in non-interactive mode. See docs at http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.show

EDIT:

After further info from OP, blocking had to be enabled explicitly using plt.show(block=True).

like image 50
Munir Avatar answered Sep 29 '22 12:09

Munir