Matplotlib 是Python 语言及其数值计算库NumPy 的绘图 库 。它提供了一个面向对象 的API ,可以将绘图嵌入到使用通用GUI工具包 (如Tkinter 、wxPython 、Qt 或GTK )的程序中。它还有一个基于状态机 (就像OpenGL )的过程式编程 “pylab”接口,其设计与MATLAB 非常类似,但由於命名空間 的問題,因此建議改用matplotlib.pyplot取代。[ 3] SciPy 使用matplotlib进行图形绘制。
Matplotlib最初由美國神經生物學家John D. Hunter 撰写,於2003年面世,从此它拥有一个活跃的开发社区[ 4] ,并根据BSD许可证 发布。 在John D. Hunter于2012年8月去世前不久,Michael Droettboom被提名为matplotlib的主要开发者[ 5] ,随后,Thomas Caswell也加入了他的行列。[ 6] [ 7] Matplotlib是一个由NumFOCUS财政资助的项目。[ 8]
Matplotlib 2.0.x支持Python 2.7到3.10版本。Matplotlib 1.2是第一个支持Python 3.x的版本。Matplotlib 1.4是最后一个支持Python 2.6的版本。[ 9] Matplotlib已签署Python 3声明,承诺在2020年后不再支持Python 2。[ 10]
与MATLAB的比较
Pyplot是matplotlib的一个模块,它提供了一个类似MATLAB的接口。 [ 11] 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 ()
更多例子
Image plot
Contour plot
Scatter plot
Polar plot
Line plot
3-D plot
Image plot
轶事
使用xkcd风格绘制的正弦函数图像
为了致敬xkcd ,matplotlib加入了matplotlib.pyplot.xkcd()函数,模仿xkcd的漫画风格进行绘图。[ 12] [ 13]
参考资料
参见
外部链接