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都是成熟的开源项目。 它们都可以产生多种不同绘图类型。 虽然很难指定一种某人能做而他人不能做的图形类型,但它们仍然具有不同的优点和缺点:
例子
曲线图
>> 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(X2 + Y2) >> Z = np.sin(R) >> surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm) >> plt.show()
更多例子
File:Mpl example qbo.svg|Image plot
File:Mpl example Helmoltz coils.svg|Contour plot
File:Weight Growth of RN First Rate Line-of-Battle Ships 1630-1875.svg|Scatter plot
File:Logarithmic Spiral Pylab.svg|Polar plot
File:Temp-sunspot-co2.svg|Line plot
File:Mpl example Rosenbrock function.svg|3-D plot
File:Mandelbrot set, plotted with Matplotlib.svg|Image plot
轶事
为了致敬xkcd,matplotlib加入了matplotlib.pyplot.xkcd()函数,模仿xkcd的漫画风格进行绘图。
参考资料
参见
*gnuplot
*MATLAB
外部链接
*
评论 (0)