Not able to plot graph: matplotlib is needed for plotting

16,268

Solution 1

You need to install matplotlib, as instructed (this error in thrown by mprof when it can't find matplotlib).

You can do so using pip pip install matplotlib (you might need to prefix this with sudo) or your package manager:

  • sudo apt-get install -y python-matplotlib on Debian, Ubuntu and derivatives.
  • sudo yum install -y python-matplotlib on RHEL, CentOS and derivatives.

Solution 2

It seems matplotlib: 3.0.1 does not go well with python 3.7 in conda environment. df.plot() command could not be executed properly showing "ImportError: matplotlib is required for plotting" but actually matplotlib is installed.

I tried to downgrade matplotlib to 3.0.0 then everything is fine.

conda install -n [your_conda_envionment] matplotlib==3.0.0

Solution 3

I had same problem on freshely installed Ubuntu 16.04. To solve it, I have installed SciPy like this: sudo pip install scipy

Also I had to install tkinter lib like this: sudo apt-get install python-tk

I guess somewhere in the past, matplotlib had scipy as dependency, but now it only has numpy, while mprof plot requires scipy.

Share:
16,268
vikas
Author by

vikas

Updated on June 07, 2022

Comments

  • vikas
    vikas almost 2 years

    I am able to generate *.dat file:

    vikas@server:~/memory_profiler-0.36$ ./mprof run --python test_sl.py 
    vikas@server:~/memory_profiler-0.36$ ls *.dat
    mprofile_20151001035123.dat
    

    But when I am trying to plot graph then it is saying "matplotlib is needed for plotting"

    vikas@server:~/memory_profiler-0.36$ ./mprof plot --output=plot.png 
    matplotlib is needed for plotting.
    

    Did I miss anything?

    Function I am profiling is run() which is inside: file_to_be_profiled.py

    #!/usr/bin/python
    
    import time
    import os, sys, commands
    from memory_profiler import profile
    from guppy import hpy
    
    @profile
    def run():
        d = {}
        l = []
        hp = hpy()
        before = hp.heap()
    
        d["k1"] = 'val1'
        d["k2"] = 10
        count = 0
        while (count < 9):
            l.append(count)
            print 'The count is:', count
            count = count + 1
        print "Good bye!"
        after = hp.heap()
        leftover = after - before
        print leftover
    
    if __name__ == '__main__':
        sys.exit(run())
    

    And I am invoking run() from my test script: test_sl.py:

    #!/usr/bin/python
    
    import commands
    
    # for the time being I am running my test to profile method: run() inside file_to_be_profiled.py
    run_cmd = './file_to_be_profiled.py
    commands.getstatusoutput(run_cmd)
    

    I am running on ubuntu machine. But apt-get install did not worked for me. Then I did the install from source. But then also I am getting same error.

    apt-get failed:

    vikas@server:~/memory_profiler-0.36$ sudo apt-get install -y python-matplotlib
    [sudo] password for vikaskuk:
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Package python-matplotlib is not available, but is referred to by another package.
    
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source
    
    E: Package 'python-matplotlib' has no installation candidate
    vikask@server:~/memory_profiler-0.36$ ./mprof plot --output=plot.png
    matplotlib is needed for plotting.
    

    Then I attempted pip install... which also did not go through:

    vikas@server:~/memory_profiler-0.36$ pip install matplotlib
    Downloading/unpacking matplotlib
      Cannot fetch index base URL https://pypi.python.org/simple/
      Could not find any downloads that satisfy the requirement matplotlib
    Cleaning up...
    No distributions at all found for matplotlib
    Storing debug log for failure in /home/vikaskuk/.pip/pip.log
    

    Finally I tried installing from source which seems to be succeeded:

    vikas@server:~/memory_profiler-0.36$ cd ../matplotlib
    vikas@server:~/matplotlib$ cd matplotlib-master/
    
    (virtualenv)vikaskuk@beehive:~/matplotlib/matplotlib-master$ vi INSTALL
    (virtualenv)vikaskuk@beehive:~/matplotlib/matplotlib-master$ python setup.py build
    ============================================================================
    Edit setup.cfg to change the build options
    
    BUILDING MATPLOTLIB
                matplotlib: yes [1.5.dev1]
                    python: yes [2.6.6 (r266:84292, Sep 15 2010, 16:22:56)  [GCC
                            4.4.5]]
                  platform: yes [linux2]
    
    REQUIRED DEPENDENCIES AND EXTENSIONS
                     numpy: yes [not found. pip may install it below.]
                       six: yes [using six version 1.5.2]
                  dateutil: yes [using dateutil version 2.1]
                      pytz: yes [pytz was not found. pip will attempt to install
                            it after matplotlib.]
                   tornado: yes [tornado was not found. It is required for the
                            WebAgg backend. pip/easy_install may attempt to
                            install it after matplotlib.]
                 pyparsing: yes [pyparsing was not found. It is required for
                            mathtext support. pip/easy_install may attempt to
                            install it after matplotlib.]
                    libagg: yes [pkg-config information for 'libagg' could not
                            be found. Using local copy.]
                  freetype: no  [The C/C++ header for freetype2 (ft2build.h)
                            could not be found.  You may need to install the
                            development package.]
                       png: no  [pkg-config information for 'libpng' could not
                            be found.]
                     qhull: yes [pkg-config information for 'qhull' could not be
                            found. Using local copy.]
    
    OPTIONAL SUBPACKAGES
               sample_data: yes [installing]
                  toolkits: yes [installing]
                     tests: yes [using nose version 1.3.0 / using mock 1.0.1]
            toolkits_tests: yes [using nose version 1.3.0 / using mock 1.0.1]
    
    OPTIONAL BACKEND EXTENSIONS
                    macosx: no  [Mac OS-X only]
                    qt5agg: no  [PyQt5 not found]
                    qt4agg: no  [PySide not found; PyQt4 not found]
                   gtk3agg: no  [Requires pygobject to be installed.]
                 gtk3cairo: no  [Requires cairocffi or pycairo to be installed.]
                    gtkagg: no  [Requires pygtk]
                     tkagg: no  [The C/C++ header for Tk (tk.h) could not be
                            found.  You may need to install the development
                            package.]
                     wxagg: no  [requires wxPython]
                       gtk: no  [Requires pygtk]
                       agg: yes [installing]
                     cairo: no  [cairocffi or pycairo not found]
                 windowing: no  [Microsoft Windows only]
    
    OPTIONAL LATEX DEPENDENCIES
                    dvipng: no
               ghostscript: yes [version 8.71]
                     latex: yes [version 3.1415926]
                   pdftops: no
    
    ============================================================================
                            * The following required packages can not be built:
                            * freetype, png
    (virtualenv)vikaskuk@beehive:~/matplotlib/matplotlib-master$ python setup.py install
    ============================================================================
    Edit setup.cfg to change the build options
    
    BUILDING MATPLOTLIB
                matplotlib: yes [1.5.dev1]
                    python: yes [2.6.6 (r266:84292, Sep 15 2010, 16:22:56)  [GCC
                            4.4.5]]
                  platform: yes [linux2]
    
    REQUIRED DEPENDENCIES AND EXTENSIONS
                     numpy: yes [not found. pip may install it below.]
                       six: yes [using six version 1.5.2]
                  dateutil: yes [using dateutil version 2.1]
                      pytz: yes [pytz was not found. pip will attempt to install
                            it after matplotlib.]
                   tornado: yes [tornado was not found. It is required for the
                            WebAgg backend. pip/easy_install may attempt to
                            install it after matplotlib.]
                 pyparsing: yes [pyparsing was not found. It is required for
                            mathtext support. pip/easy_install may attempt to
                            install it after matplotlib.]
                    libagg: yes [pkg-config information for 'libagg' could not
                            be found. Using local copy.]
                  freetype: no  [The C/C++ header for freetype2 (ft2build.h)
                            could not be found.  You may need to install the
                            development package.]
                       png: no  [pkg-config information for 'libpng' could not
                            be found.]
                     qhull: yes [pkg-config information for 'qhull' could not be
                            found. Using local copy.]
    
    OPTIONAL SUBPACKAGES
               sample_data: yes [installing]
                  toolkits: yes [installing]
                     tests: yes [using nose version 1.3.0 / using mock 1.0.1]
            toolkits_tests: yes [using nose version 1.3.0 / using mock 1.0.1]
    
    OPTIONAL BACKEND EXTENSIONS
                    macosx: no  [Mac OS-X only]
                    qt5agg: no  [PyQt5 not found]
                    qt4agg: no  [PySide not found; PyQt4 not found]
                   gtk3agg: no  [Requires pygobject to be installed.]
                 gtk3cairo: no  [Requires cairocffi or pycairo to be installed.]
                    gtkagg: no  [Requires pygtk]
                     tkagg: no  [The C/C++ header for Tk (tk.h) could not be
                            found.  You may need to install the development
                            package.]
                     wxagg: no  [requires wxPython]
                       gtk: no  [Requires pygtk]
                       agg: yes [installing]
                     cairo: no  [cairocffi or pycairo not found]
                 windowing: no  [Microsoft Windows only]
    
    OPTIONAL LATEX DEPENDENCIES
                    dvipng: no
               ghostscript: yes [version 8.71]
                     latex: yes [version 3.1415926]
                   pdftops: no
    
    ============================================================================
                            * The following required packages can not be built:
                            * freetype, png
    

    But when I try to plot the graph I hit the original issue:

    vikas@server:~/matplotlib/matplotlib-master$ cd ../../memory_profiler-0.36
    vikas@server:~/memory_profiler-0.36$ ./mprof plot --output=plot.png 
    matplotlib is needed for plotting.
    

    I was able to successfully do apt-get update(there was some firewall issue and then I successfully did: sudo apt-get install -y python-matplotlib.

    But still I am getting some issue while running mprof:

    vikas@server:~/memory_profiler-0.36$ ./mprof plot --output=plot.png
    Using last profile data.
    Traceback (most recent call last):
      File "./mprof", line 494, in <module>
        actions[get_action()]()
      File "./mprof", line 454, in plot_action
        pl.figure(figsize=(14, 6), dpi=90)
      File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 423, in figure
        **kwargs)
      File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
        return new_figure_manager_given_figure(num, figure)
      File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
        window = Tk.Tk()
      File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1767, in __init__
        self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
    _tkinter.TclError: no display name and no $DISPLAY environment variable
    

    Why do I need to set the display? I am working on ubuntu hosted machine.