Matplotlib

Matplotlib是Python语言及其数值计算库NumPy的库。它提供了一个面向对象的API，可以将绘图嵌入到使用通用GUI工具包（如Tkinter、wxPython、Qt或GTK）的程序中。它还有一个基于状态机（就像OpenGL）的过程式编程“pylab”接口，其设计与MATLAB非常类似，但由於命名空間的問題，因此建議改用matplotlib.pyplot取代。SciPy使用matplotlib进行图形绘制。

Matplotlib最初由美國神經生物學家撰写，於2003年面世，从此它拥有一个活跃的开发社区，并根据BSD许可证发布。 在John D. Hunter于2012年8月去世前不久，Michael Droettboom被提名为matplotlib的主要开发者，随后，Thomas Caswell也加入了他的行列。Matplotlib是一个由NumFOCUS财政资助的项目。

Matplotlib 2.0.x支持Python 2.7到3.10版本。Matplotlib 1.2是第一个支持Python 3.x的版本。Matplotlib 1.4是最后一个支持Python 2.6的版本。Matplotlib已签署Python 3声明，承诺在2020年后不再支持Python 2。

 与MATLAB的比较 
Pyplot是matplotlib的一个模块，它提供了一个类似MATLAB的接口。 Matplotlib被设计成与MATLAB一样可用，能够使用Python，并且具有自由开源的优点。

 与 Gnuplot的比较 
gnuplot和matplotlib都是成熟的开源项目。 它们都可以产生多种不同绘图类型。 虽然很难指定一种某人能做而他人不能做的图形类型，但它们仍然具有不同的优点和缺点：
 优点 缺点 Matplotlib  
 带有内置代码的默认绘图样式
 与Python的深度集成
 Matlab风格的编程接口（对一些人来说是优点，但对于其他人来说可能是缺点）。
 图形绘制相较Gnuplot更加美观 高度依赖其他包，如Numpy。
 只适用于Python：很难/不可能在Python以外的语言中使用。 （但可以从Julia通过PyPlot软件包使用） Gnuplot  跨语言解决方案：可以用作通过管道或文件以不同语言编写的应用程序（例如GNU Octave，Maxima，JavaGnuplotHybrid）中的绘图引擎。
 独立程序：没有外部依赖。
 处理大型数据集时非常快。
 更容易操纵绘图细节 旧的默认绘图样式：通常需要小的调整以产生有吸引力的图。
 在开发中活跃成员的数量较少（与Matplotlib相比）。

 例子 
 曲线图
缩略图
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> a = np.linspace(0,10,100)
>>> b = np.exp(-a)
>>> plt.plot(a,b)
>>> plt.show()
直方图
缩略图
>>> import matplotlib.pyplot as plt
>>> from numpy.random import normal,rand
>>> x = normal(size=200)
>>> plt.hist(x,bins=30)
>>> plt.show()
散点图
缩略图
>>> import matplotlib.pyplot as plt
>>> from numpy.random import rand
>>> a = rand(100)
>>> b = rand(100)
>>> plt.scatter(a,b)
>>> plt.show()
3D 图
缩略图
>>> 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') (Old)
>>> ax = fig.add_subplot(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)
>>> plt.show()
更多例子

 轶事 
为了致敬xkcd，matplotlib加入了matplotlib.pyplot.xkcd()函数，模仿xkcd的漫画风格进行绘图。

 参考资料 

 参见 

gnuplot
MATLAB

 外部链接 



Category:用Python編程的自由軟體
Category:自由圖表軟件
Category:Python科学库