MatplotlibPython语言及其数值计算库NumPy绘图英语Plot (graphics)。它提供了一个面向对象API,可以将绘图嵌入到使用通用GUI工具包(如TkinterwxPythonQtGTK)的程序中。它还有一个基于状态机(就像OpenGL)的过程式编程“pylab”接口,其设计与MATLAB非常类似,但由於命名空間的問題,因此建議改用matplotlib.pyplot取代。[3]SciPy使用matplotlib进行图形绘制。

matplotlib
Matplotlib繪製的圖表與程式碼
Matplotlib繪製的圖表與程式碼
原作者John D. Hunter英语John D. Hunter
開發者Michael Droettboom, et al.
首次发布2003年,​23年前​(2003[1]
当前版本3.3.2(2020年9月15日,​5年前​(2020-09-15[2]
源代码库 編輯維基數據鏈接
编程语言Python
引擎 編輯維基數據鏈接
操作系统跨平臺
类型绘图英语List of information graphics software
许可协议matplotlib license
网站matplotlib.org

Matplotlib最初由美國神經生物學家John D. Hunter英语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()

更多例子

轶事

编辑
 
使用xkcd风格绘制的正弦函数图像

为了致敬xkcd,matplotlib加入了matplotlib.pyplot.xkcd()函数,模仿xkcd的漫画风格进行绘图。[12][13]

参考资料

编辑
  1. ^ Copyright Policy. [2017-02-23]. (原始内容存档于2020-12-02). 
  2. ^ Releases – matplotlib. [2019-05-13]. (原始内容存档于2020-11-11). 
  3. ^ API Overview. matplotlib.org. [2021-06-18]. (原始内容存档于2021-07-01). 
  4. ^ Matplotlib github stats. matplotlib.org. [2021-06-18]. (原始内容存档于2021-06-24). 
  5. ^ Announcing Michael Droettboom as the lead matplotlib developer. matplotlib.org. [2017-02-23]. (原始内容存档于2020-10-27). 
  6. ^ Matplotlib Lead Developer Explains Why He Can’t Fix the Docs—But You Can – NumFOCUS. NumFOCUS. 2017-10-05 [2018-04-11]. (原始内容存档于2021-06-28) (美国英语). 
  7. ^ Credits – Matplotlib 2.2.2 documentation. matplotlib.org. [2018-04-11]. (原始内容存档于2021-06-24). 
  8. ^ NumFOCUS Sponsored Projects. NumFOCUS. [2021-10-25]. (原始内容存档于2023-06-04). 
  9. ^ Installing – Matplotlib 2.0.2 documentation. [2017-06-23]. (原始内容存档于2021-06-24). 
  10. ^ Add Matplotlib to list by takluyver · Pull Request #20 · python3statement/python3statement.github.io. GitHub. [2018-04-11]. (原始内容存档于2020-11-20) (英语). 
  11. ^ Matplotlib: Python plotting — Matplotlib 3.2.0 documentation. matplotlib.org. [2020-03-14]. (原始内容存档于2021-05-07). 
  12. ^ matplotlib.pyplot.xkcd — Matplotlib 3.4.2 documentation. matplotlib.org. [2021-07-05]. (原始内容存档于2021-07-09) (英语). 
  13. ^ XKCD — Matplotlib 3.4.2 documentation. matplotlib.org. [2021-07-05]. (原始内容存档于2021-07-11) (英语). 

参见

编辑

外部链接

编辑

📚 Artikel Terkait di Wikipedia

Spyder

Spyder(前身為Pydee)是一個使用Python語言的開放原始碼跨平台科學運算集成開發環境(IDE)。Spyder整合了NumPy,SciPy,Matplotlib與IPython,以及其他开源软件。 與其他科學數值分析專用IDE(如Matlab或RStudio)相比,Spyder有下列特色:開放原始碼

Pandas

for x in df_index]) [<matplotlib.axis.XTick object at 0x7bb6925408f0>, <matplotlib.axis.XTick object at 0x7bb692541700>, <matplotlib.axis.XTick object at

Python

matplotlib:基于NumPy的综合性绘图(英语:Plot (graphics))库,用于创建静态的、动画的和交互式的数据可视化。 pandas:用于数据分析和数据操纵的软件库,它在NumPy基础上,提供了加标签数据结构“数据帧”,和统计函数等。它的缺省绘图后端是matplotlib,还可以扩展上第三方绘图(英语:Plot

SciPy

Pérez发布了IPython(增强型交互式shell,在科学计算界广泛使用);John Hunter发布了Matplotlib(2D绘图库)的第一个版本,SciPy环境继续增长,并增加了更多用于科学计算的工具。 https://github.com/scipy/scipy/releases/tag/v1

IPython

%debug命令在异常点启动调试器。 %pdb命令来激活IPython调试器,这样,每当异常抛出时,调试器就会自动运行。 %pylab命令可以使Numpy和matplotlib中的科学计算功能生效。 用 ! 表示执行shell命令,用$将python的变量转化成shell变量。

NumPy

始碼的程式語言之上。此外NumPy也可以結合其它的Python擴充函式庫。例如SciPy,這個函式庫提供了更多與MATLAB相似的功能;以及Matplotlib,這是一個與MATLAB內建繪圖功能類似的函式庫。而從本質上來說,NumPy與MATLAB同樣是利用BLAS與LAPACK來提供高效率的線性代數運算。

Scikit-learn

NEAR(英语:LIBLINEAR)的类似的包装实现的。 Scikit-learn与很多其他Python库可以良好的集成起来,比如用于绘图的matplotlib和plotly(英语:plotly),用于阵列向量化的NumPy,用于数据帧的pandas,用于科学计算的SciPy等等。

黎曼ζ函數

複平面中一矩形區域之黎曼ζ函數 ζ ( z ) {\displaystyle \zeta (z)} ;此圖用Matplotlib程式繪圖產生,使用到定義域著色方法。