From Wikipedia, the free encyclopedia
Jump to: navigation, search
Matplotlib logo.svg
Matplotlib screenshot.png
Circular diffraction pattern using matplotlib
Original author(s) John D. Hunter
Developer(s) Michael Droettboom, et al.
Stable release 1.4.3 (17 February 2015; 9 months ago (2015-02-17)) [±]
Written in Python
Operating system Cross-platform
Type Plotting
License matplotlib license

matplotlib is a plotting library for the Python programming language and its numerical mathematics extension NumPy. It provides an object-oriented API for embedding plots into applications using general-purpose GUI toolkits like wxPython, Qt, or GTK+. There is also a procedural "pylab" interface based on a state machine (like OpenGL), designed to closely resemble that of MATLAB. SciPy makes use of matplotlib.

matplotlib was originally written by John D. Hunter, has an active development community,[1] and is distributed under a BSD-style license. Michael Droettboom was nominated as matplotlib's lead developer shortly before John Hunter's death in 2012.[2]

As of 9 October 2015, matplotlib 1.4.x supports Python versions 2.6 through 3.4. Matplotlib 1.2 is the first version of matplotlib to support Python 3.x.[3]

Comparison with MATLAB[edit]

The pylab interface makes matplotlib easy to learn for experienced MATLAB users, making it a viable alternative to MATLAB as a teaching tool for numerical mathematics and signal processing.

Some of the advantages of the combination of Python, NumPy, and matplotlib over MATLAB include:

  • Based on Python, a full-featured modern object-oriented programming language suitable for large-scale software development
  • Free, open source, no license servers
  • Native SVG support

Typically pylab is imported to bring NumPy and matplotlib into a single global namespace for the most MATLAB like syntax, however a more explicit import style, which names both matplotlib and NumPy, is the preferred coding style.[4]

Comparison with Gnuplot[edit]

Both Gnuplot and Matplotlib are mature open source projects. They both can produce enormous types of different plots. While it is hard to specify a type of figure that one can do and the other can not, they still have different advantages and disadvantages:

Advantages Disadvantages
  • Default plot styles with built-in code
  • Deep integration with Python
  • Matlab style programming interface (this is an advantage for some, but a disadvantage for others).
  • Heavily relied on other packages, such as Numpy.
  • Only works for Python: hard/impossible to be used in languages other than Python. (But can be used from Julia via PyPlot package)
  • Cross-language solution: can be used as a plot engine in applications (e.g. GNU Octave, Maxima (software), JavaGnuplotHybrid) written in different languages through pipes or files.
  • Standalone program: no external dependencies.
  • Very fast when processing large datasets.
  • Easier to manipulate plot details
  • Old default plot styles: need a little bit of small tweaks to produce an attractive figure.
  • A smaller number (compared to Matplotlib) of active members in development.


Line plot

Matplotlib basic v.svg
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> a = np.linspace(0,10,100)
>>> b = np.exp(-a)
>>> plt.plot(a,b)


Matplotlib histogram v.svg
>>> from numpy.random import normal,rand
>>> x = normal(size=200)
>>> plt.hist(x,bins=30)

Scatter plot

Matplotlib scatter v.svg
>>> a = rand(100)
>>> b = rand(100)
>>> plt.scatter(a,b)

3D plot

Matplotlib 3d v.svg
>>> from matplotlib import cm
>>> from mpl_toolkits.mplot3d import Axes3D
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> fig = plt.figure()
>>> ax = fig.gca(projection='3d')
>>> X = np.arange(-5, 5, 0.25)
>>> Y = np.arange(-5, 5, 0.25)
>>> X, Y = np.meshgrid(X, Y)
>>> R = np.sqrt(X**2 + Y**2)
>>> Z = np.sin(R)
>>> surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)

More examples


Several toolkits are available which extend matplotlib functionality. Some are separate downloads, others ship with the matplotlib source code but have external dependencies.[5]

  • Basemap: map plotting with various map projections, coastlines, and political boundaries[6]
  • Cartopy: a mapping library featuring object-oriented map projection definitions, and arbitrary point, line, polygon and image transformation capabilities.[7] (matplotlib v1.2 and above)
  • Excel tools: utilities for exchanging data with Microsoft Excel
  • GTK tools: interface to the GTK+ library
  • Qt interface
  • Mplot3d: 3-D plots
  • Natgrid: interface to the natgrid library for gridding irregularly spaced data.

Related projects[edit]


  1. ^ "Matplotlib github stats". 
  2. ^ "Announcing Michael Droettboom as the lead matplotlib developer". 
  3. ^ "What’s new in matplotlib". Retrieved 2015-10-09. 
  4. ^ "Matplotlib coding styles". 
  5. ^ "Toolkits". 
  6. ^ Whitaker, Jeffrey. "The Matplotlib Basemap Toolkit User's Guide (v. 1.0.5)". Matplotlib Basemap Toolkit documentation. Retrieved 24 April 2013. 
  7. ^ Elson, Philip. "Cartopy". Retrieved 24 April 2013. 
  8. ^ "Bigglessimple, elegant python plotting". Retrieved 24 November 2010. 
  9. ^ "Chaco". 
  10. ^ " on". Retrieved 24 November 2010. 
  11. ^ "PyCha". 
  12. ^ "PyPlotter". 
  13. ^ "PyX". 

External links[edit]