python - matplotlib does not show my drawings although I call pyplot.show()


Translate

Help required on matplotlib. Yes, I did not forget calling the pyplot.show().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

It returns matplotlib.lines.Line2D at 0xade2b2c as the output.

p.show()

There is nothing to happen. No error message. No new window. Nothing. I install matplotlib by using pip and I didn't take any error messages.

Details:

I use,

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1

All Answers
  • Translate

    If I set my backend to template in ~/.matplotlib/matplotlibrc, then I can reproduce your symptoms:

    ~/.matplotlib/matplotlibrc:

    # backend      : GtkAgg
    backend      : template
    

    Note that the file matplotlibrc may not be in directory ~/.matplotlib/. In this case, the following code shows where it is:

    >>> import matplotlib
    >>> matplotlib.matplotlib_fname()
    

    In [1]: import matplotlib.pyplot as p
    
    In [2]: p.plot(range(20),range(20))
    Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]
    
    In [3]: p.show()
    

    If you edit ~/.matplotlib/matplotlibrc and change the backend to something like GtkAgg, you should see a plot. You can list all the backends available on your machine with

    import matplotlib.rcsetup as rcsetup
    print(rcsetup.all_backends)
    

    It should return a list like:

    ['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
    'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
    'ps', 'svg', 'template']
    

    Reference:


  • Translate

    I ran into the exact same problem on Ubuntu 12.04, because I installed matplotlib (within a virtualenv) using

    pip install matplotlib
    

    To make long story short, my advice is: don't try to install matplotlib using pip or by hand; let a real package manager (e.g. apt-get / synaptic) install it and all its dependencies for you.

    Unfortunately, matplotlib's backends (alternative methods for actually rendering your plots) have all sorts of dependencies that pip will not deal with. Even worse, it fails silently; that is, pip install matplotlib appears to install matplotlib successfully. But when you try to use it (e.g. pyplot.show()), no plot window will appear. I tried all the different backends that people on the web suggest (Qt4Agg, GTK, etc.), and they all failed (i.e. when I tried to import matplotlib.pyplot, I get ImportError because it's trying to import some dependency that's missing). I then researched how to install those dependencies, but it just made me want to give up using pip (within virtualenv) as a viable installation solution for any package that has non-Python package dependencies.

    The whole experience sent me crawling back to apt-get / synaptic (i.e. the Ubuntu package manager) to install software like matplotlib. That worked perfectly. Of course, that means you can only install into your system directories, no virtualenv goodness, and you are stuck with the versions that Ubuntu distributes, which may be way behind the current version...


  • Translate

    %matplotlib inline

    For me working with notebook, adding the above line before the plot works.


  • Translate

    For future reference,

    I have encountered the same problem -- pylab was not showing under ipython. The problem was fixed by changing ipython's config file {ipython_config.py}. In the config file

    c.InteractiveShellApp.pylab = 'auto'

    I changed 'auto' to 'qt' and now I see graphs


  • Translate

    Just type:

    plt.ion()

    See https://www.youtube.com/watch?v=1zmV8lZsHF4 at 23:30 !

    plt is used because of my import: import matplotlib.pyplot as plt

    I'm using python2.7 on a mac with iTerm2.


  • Translate

    What solved my problem was just using the below two lines in ipython notebook at the top

    %matplotib inline
    %pylab inline
    

    And it worked. I'm using Ubuntu16.04 and ipython-5.1


  • Translate

    I had to install matplotlib from source to get this to work. The key instructions (from http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/) are:

    $ workon plotting
    $ pip uninstall matplotlib
    $ git clone https://github.com/matplotlib/matplotlib.git
    $ cd matplotlib
    $ python setup.py install
    

    By changing the backend, as @unutbu says, I just ran into loads more problems with all the different backends not working either.


  • Translate

    Adding the following two lines before importing pylab seems to work for me

    import matplotlib
    matplotlib.use("gtk")
    
    import sys
    import pylab
    import numpy as np
    

  • Translate

    Be sure to have this startup script enabled : ( Preferences > Console > Advanced Options )

    /usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py
    

    If the standard PYTHONSTARTUP is enabled you won't have an interactive plot


  • Translate

    Similar to @Rikki, I solved this problem by upgrading matplotlib with pip install matplotlib --upgrade. If you can't upgrade uninstalling and reinstalling may work.

    pip uninstall matplotlib
    pip install matplotlib
    

  • Translate

    After running your code include:

    import pylab as p
    p.show()
    

  • Translate

    I found that I needed window = Tk() and then window.mainloop()


  • Translate

    For Ubuntu 12.04:

    sudo apt-get install python-qt4
    virtualenv .env --no-site-packages
    source .env/bin/activate
    easy_install -U distribute
    ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
    ln -s /usr/lib/python2.7/dist-packages/sip.so .
    pip install matplotlib
    

  • Translate

    For me the problem happens if I simply create an empty matplotlibrc file under ~/.matplotlib on macOS. Adding "backend: macosx" in it fixes the problem.

    I think it is a bug: if backend is not specified in my matplotlibrc it should take the default value.