Python中常用的可視化工具 Matplotlib 簡單入門
Matplotlib是一個Python 2D繪圖庫和一些基本的3D圖表,可以生成各種格式圖片。Matplotlib可用于Python腳本,Python shell,Jupyter筆記本,Web應用程序服務器等等。
Matplotlib是約翰·亨特(John Hunter,1968-2012)的心血結晶,他和許多貢獻者一起投入了不可估量的時間和精力來制作一套全球數千名科學家使用的軟件。
查看Matplotlib 版本
- >>> import matplotlib
- >>> matplotlib.__version__
- '3.0.3'
在Python 中調用Matplotlib,通常使用 import matplotlib.pyplot 調用Matplotlib 集成的快速繪圖 pyplot模塊。
Figure(整個圖像)
在任何繪圖之前,需要一個Figure對象,可以理解成需要一張畫板才能開始繪圖。
- import matplotlib.pyplot as plt
- fig = plt.figure()
在Matplotlib中,整個圖像為一個Figure 對象。Figure對象中可以包含一個或者多個Axes對象,每個Axes 對象都是一個擁有自己坐標系統的繪圖區域。

Axes(軸線)
在擁有Figure對象之后,在作畫前還需要軸,沒有軸的話就沒有繪圖基準,所以需要添加Axes。也可以理解成為真正可以作畫的紙。
- ax = fig.add_subplot(111)
- ax.set(xlim=[0, 5], ylim=[0, 6], title='An Example Axes',
- ylabel='Y-Axis', xlabel='X-Axis')
- plt.show()
上述代碼,在一幅圖上添加了一個Axes,然后設置了這個Axes的X軸以及Y軸的取值范圍,以及一些文本信息。效果如下:

Matplotlib下, 一個 Figure 對象可以包含多個子圖(Axes),可以使用 subplot() 快速繪制,其調用形式如下 :
- subplot(numRows, numCols, plotNum)
- 圖表的整個繪圖區域被分成 numRows 行和 numCols 列;
- 然后按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1;
- plotNum 參數指定創建的 Axes 對象所在的區域;
對于上面的fig.add_subplot(111)就是添加Axes的,參數的解釋的在畫板的第1行第1列的***個位置生成一個Axes對象來準備作畫。
也可以通過fig.add_subplot(2, 2, 1)的方式生成Axes,前面兩個參數確定了面板的劃分。
如果 numRows, numCols 和 plotNum 這三個數都小于 10 的話, 可以把它們縮寫為一個整數, 例如 subplot(221) 和 subplot(2,2,1) 是相同的。
subplot 在 plotNum 指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除。

Multiple Axes 多個子圖
下面的一次性生成所有 Axes:

簡單總結一下
- 在最頂層的是畫布,稱之為figure;
- 在畫布上可以在不同的區域上繪制,這些區域稱之為subplot;
每一個子圖區域,又可以做如下劃分:
- axis 也就是x,y坐標軸;
- tick 也就是每一個坐標軸的刻度;
- label 也就是坐標軸上的標簽;
- title 也就是每一個子圖的標題;
- data 是輸入的數據繪制出的圖像;
Matplotlib 繪圖演示代碼
將這個圖像劃分成8個子區域,每個子區域繪制一個不同的圖像。
- import numpy as np
- import matplotlib.pyplot as plt
- x=[1,2,3,4]
- y=[3,5,10,25]
- # 創建子圖
- plt.subplot(241)
- plt.plot(x,y)
- plt.title("plot")
- plt.subplot(242)
- plt.scatter(x, y)
- plt.title("scatter")
- plt.subplot(243)
- plt.pie(y)
- plt.title("pie")
- plt.subplot(244)
- plt.bar(x, y)
- plt.title("bar")
- plt.subplot(245)
- plt.boxplot(y, sym="o")
- plt.title("box")
- # sin/cos 圖像
- plt.subplot(246)
- x = np.linspace(0, np.pi)
- y_sin = np.sin(x)
- y_cos = np.cos(x)
- plt.plot(x, y_sin)
- plt.plot(x, y_cos)
- # g-- 設置線條樣式和顏色
- plt.subplot(247)
- plt.plot(x, y_sin, 'g--')
- plt.title("sin")
- # 加載本地圖片
- import matplotlib.image as mpimg
- img=mpimg.imread('666.jpg')
- plt.subplot(248)
- plt.imshow(img)
- plt.title("cool...")
- plt.show()
