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

Axes(軸線)
在擁有Figure對象之后,在作畫前還需要軸,沒有軸的話就沒有繪圖基準(zhǔn),所以需要添加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,然后設(shè)置了這個Axes的X軸以及Y軸的取值范圍,以及一些文本信息。效果如下:

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

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

簡單總結(jié)一下
- 在最頂層的是畫布,稱之為figure;
- 在畫布上可以在不同的區(qū)域上繪制,這些區(qū)域稱之為subplot;
每一個子圖區(qū)域,又可以做如下劃分:
- axis 也就是x,y坐標(biāo)軸;
- tick 也就是每一個坐標(biāo)軸的刻度;
- label 也就是坐標(biāo)軸上的標(biāo)簽;
- title 也就是每一個子圖的標(biāo)題;
- data 是輸入的數(shù)據(jù)繪制出的圖像;
Matplotlib 繪圖演示代碼
將這個圖像劃分成8個子區(qū)域,每個子區(qū)域繪制一個不同的圖像。
- import numpy as np
- import matplotlib.pyplot as plt
- x=[1,2,3,4]
- y=[3,5,10,25]
- # 創(chuàng)建子圖
- 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-- 設(shè)置線條樣式和顏色
- 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()
