Not able to plot graph: matplotlib is needed for plotting
Asked Answered
T

4

7

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.

Trattoria answered 1/10, 2015 at 11:3 Comment(1)
Actually, your build from source didn't succeed either. You don't have freetype or libpng installed on your machine, so matplotlib can't build. pip install ran into a separate issue (are you behind a firewall?), but would have hit that same snag shortly thereafter. I'm not sure why you're having issues installing through the package manager, but apt-get install libfreetype6-dev, libpng-dev, and python-tk and then you should be able to build from source.Banksia
K
3

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.
Kravits answered 1/10, 2015 at 11:12 Comment(5)
I am running on ubuntu machine. But apt-get install did not worked for me. Then I did the install from source. Editing the question with the steps what I did.Trattoria
@Trattoria Make sure you explain why apt-get install did not work for you. Is there an error message?Kravits
There may be some kind of firewall in my organisation... thats why apt-get would have failed. Thus I attempted source install which looks like did succeed. But then also original issue persist. Please see my original question.... i've edited now with what all I did.Trattoria
@Trattoria No, the source installation failed (see the end of the output). Try running sudo apt-get update before you run apt-get install. You are going to need to make apt-get work at some point, because you're missing a lot of dependencies for matplotlib and apt-get is realistically the only way to get them.Kravits
post successfull apt-get update I was able to install matplotlib... but still mprof complains about display. Please have a look on the original question. I've cited with the error I am getting.Trattoria
R
3

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

Realm answered 1/11, 2018 at 0:28 Comment(0)
L
1

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.

Lisabeth answered 16/10, 2017 at 11:18 Comment(0)
N
0

I had the same problem. I used memory_profiler lib typing this commands (mprof run runner.py and mprof plot) and got a message "matplotlib is needed for plotting"

I tried to get rid of this problem following advice I found here but in the result I solved this problem completing these simple steps:

  1. delete files in /usr/lib64/python2.7/site-packages/ connected with matplotlib (or you can uninstall matplotlib using the ordinary way)

  2. use sudo yum-builddep python-matplotlib to install connected packages (222 packages were installed, if you need apt-get, you need this command: sudo apt-get build-dep python-matplotlib)

  3. install matplotlib sudo yum reinstall python-matplotlib (or use install command, with apt-get: sudo apt-get install python-matplotlib)

I believe this will help.

Nedrud answered 31/7, 2017 at 8:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.