matplotlib

Python编程语言的一个绘图库

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年,​21年前​(2003[1]
當前版本3.3.2(2020年9月15日,​4年前​(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) (英語). 

參見

外部連結