首頁 > 軟體

詳解Python中matplotlib模組的繪圖方式

2022-07-05 14:04:21

1、matplotlib之父簡介

matplotlib之父John D. Hunter已經去世,他的一生輝煌而短暫,但是他開發的的該開源庫還在繼續著輝煌。國內介紹的資料太少了,查閱了一番整理如下:

  • 1968 出身於美國的田納西州代爾斯堡。
  • 之後求學於普林斯頓大學。
  • 2003年釋出Matplotlib 0.1版,初衷是博士研究期間為視覺化癲癇患者的腦電圖(ECoG)資料;
  • 之後,美國國家航空航天局(NASA)太空望遠鏡科學研究所的哈勃望遠鏡背後團隊(Hubble Space Telescope),選擇Matplotlib作為了畫圖程式包,並一直為 Matplotlib 開發團隊提供資金支援,從而大大促進了 Matplotlib 的發展。
  • 2004 年於芝加哥大學獲得神經生物學方向博士學位。
  • 2005年供職於芝加哥的一家投資公司,從事量化分析(真是生物人遍佈各行各業)。
  • 之後以董事的身份創立了專為資料科學贊助的非盈利組織  NumFOCUS Foundation。
  • 2007年美國鳳凰號探測器(Phoenix spacecraft)登入火星,NASA使用Matplotlib視覺化了第一張黑洞的圖片。
  • 2012年因John D. Hunter個人對Python和資料科學方向的傑出貢獻,被Python社群授予第一屆PSF Distinguished Service Awards獎項  。
  • 2012.08 因患惡性結腸癌英年早逝,享年44歲。
  • 雖然Matplotlib之父已經去世,但是,大量開源愛好者在fork著這個視覺化包,延續著輝煌 https://github.com/matplotlib
  • NumFOCUS 組織每年夏天會贊助1到2個學生,在高階貢獻者的帶領下,為Matplolib全職工作10周左右(2018年獎金多達$6,000):https://numfocus.org/programs/john-hunter-technology-fellowship
  • 2013年起,SciPy每年舉行視覺化比賽:John Hunter Excellence in Plotting Competition,一是為了為了紀念John Hunter的貢獻,二是為了強調資料視覺化對科學進步的重要性,並展示開源軟體力量。;2020年報名截止日期為06月01號,獎金優渥(1st prize: $1000;2nd prize: $750;3rd prize: $500):https://jhepc.github.io/index.html

2、matplotlib圖形結構

figure層

指整張圖,可設定整張圖的解析度(dpi),長寬(figsize)、標題(title)等特徵;

可包含多個axes,可簡單理解為多個子圖(下圖為兩個axes); 

figure置於canvas系統層之上,使用者不可見。

axes層

每個子圖,可以繪製各種圖形,例如柱狀圖(bar),餅圖(pie函數),箱圖(boxplot)等;

設定每個圖的外觀格線(grid)的開關、座標軸(axis)開關等;

設定每個座標軸(axis)的名字(label)、子圖示題(title)、圖例(legend)等;

設定座標軸範圍(scale)、座標軸刻度(tricks)等;

下圖中具有兩個axes:

一張matplotlib圖的組成

下面這張matplotlib圖包含一張圖的常見元素 ,例如標題、座標軸、軸標籤、刻度、文字註釋、圖例等。

3、matplotlib兩種畫繪圖方法

方法一:使用matplotlib.pyplot

matplotlib.pyplot簡介

這種繪圖主要使用pyplot模組,pyplot.py程式碼量有3000多行(windows下儲存於xxxsite-packagesmatplotlibpyplot.py),該指令碼裡面有大量def定義的函數,繪圖時就是呼叫pyplot.py中的函數。

pyplot方法繪圖舉例

#matplotlib.pyplot 介面
import numpy as np
import matplotlib.pyplot as plt#匯入pyplot,matplotlib.pyplot簡寫為plt
def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(dpi=100)
plt.subplot(211)
plt.plot(t1, f(t1), color='tab:blue', marker='o')
plt.plot(t2, f(t2), color='black')
plt.title('demo')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), color='tab:orange', linestyle='--')
plt.suptitle('matplotlib.pyplot api')
plt.show()

方法二:物件導向方法

畫比較複雜的圖形時,物件導向方法會更方便。這種繪圖方式主要使用matplotlib的兩個子類:matplotlib.figure.Figure和matplotlib.axes.Axes,畫每張圖時,畫布為matplotlib.figure.Figure的一個範例,每個子圖為matplotlib.axes.Axes的一個範例,分別可以繼承父類別的所有方法,也就是說你繪圖時,你想設定的元素(格線啊,座標刻度啊等)都可以在二者的屬性中找出來使用。

matplotlib.figure.Figure

該物件主要用於figure的調整

matplotlib.axes.Axes

物件導向方法繪圖舉例

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)


t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

fig, axs = plt.subplots(2, dpi=100)
#fig為matplotlib.figure.Figure物件的範例figure
#axs為matplotlib.axes.Axes物件範例(每個子圖)組成的numpy.ndarray
axs[0].plot(t1, f(t1), color='tab:blue', marker='o')
axs[0].plot(t2, f(t2), color='black')

#兩種設定標題的方法
#axs[0].set_title('haha')#使用matplotlib.axes.Axes的set_title方法設定小標題
axs[0].set(title='demo1')

axs[1].plot(t2, np.cos(2*np.pi*t2), color='tab:orange', linestyle='--')
fig.suptitle('matplotlib object-oriented')#使用matplotlib.figure.Figure中的suptitle方法設定Figure標題
plt.show()

以上就是詳解Python中matplotlib模組的繪圖方式的詳細內容,更多關於Python matplotlib繪圖方式的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com