Not able to plot graph: matplotlib is needed for plotting
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
.
vikas
Updated on June 07, 2022Comments
-
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.