- Python數據可視化之matplotlib實踐
- 劉大成
- 2591字
- 2019-07-25 11:42:30
第1章 使用函數繪制matplotlib的圖表組成元素
1.1 繪制matplotlib圖表組成元素的主要函數
首先,我們來了解一下matplotlib是如何組織內容的。在一個圖形輸出窗口中,底層是一個Figure實例,我們通常稱之為畫布,包含一些可見和不可見的元素。
在畫布上,自然是圖形,這些圖形就是Axes實例,Axes實例幾乎包含了我們要介紹的matplotlib組成元素,例如坐標軸、刻度、標簽、線和標記等。Axes實例有x軸和y軸屬性,也就是可以使用Axes.xaxis和Axes.yaxis來控制x軸和y軸的相關組成元素,例如刻度線、刻度標簽、刻度線定位器和刻度標簽格式器。
這么多組成元素該如何操作呢?很幸運,matplotlib為我們準備了快速入門通道,那就是matplotlib.pyplot模塊的API,通過調用API中的函數,我們就可以快速了解應該如何繪制這些組成元素了,例如matplotlib.pyplot.xlim()和matplotlib.pyplot.ylim()就是控制x軸和y軸的數值顯示范圍。下面,我們就用圖1.1來初識繪制matplotlib的圖表組成元素的主要函數。

圖1.1
本章我們以圖1.1為講解切入點,從這些函數的函數功能、調用簽名、參數說明和調用展示四個方面來全面闡述API函數的使用方法和技術細節。幫助讀者初步了解matplotlib。
1.2 準備數據
我們導入第三方包NumPy和快速繪圖模塊pyplot,其中科學計算包NumPy是matplotlib庫的基礎,也就是說,matplotlib庫是建立在NumPy基礎之上的Python繪圖庫。圖1.1的數據生成代碼實現如下:
import matplotlib.pyplot as plt
import numpy as np
現在,我們就可以定義一些完成繪制圖1.1所需要的數據了,代碼如下:
x = np.linspace(0.5,3.5,100)
y = np.sin(x)
y1 = np.random.randn(100)
其中,函數linspace(0.5,3.5,100)是表示在0.5至3.5之間均勻地取100個數,函數randn(100)表示在標準正態分布中隨機地取100個數。
1.3 繪制matplotlib圖表組成元素的函數用法
下面我們用函數的形式學習繪圖,反過來,再用繪圖來認識函數。需要注意的是,下面函數中的位置參數用參數名稱本身進行調用簽名的講解,關鍵字參數用圖1.1中的實際圖形展示樣式進行調用簽名的說明。
1.3.1 函數plot()——展現變量的趨勢變化
函數功能:展現變量的趨勢變化。
調用簽名:plt.plot(x,y,ls="-",lw=2,label="plot figure")
參數說明
● x:x軸上的數值。
● y:y軸上的數值。
● ls:折線圖的線條風格。
● lw:折線圖的線條寬度。
● label:標記圖形內容的標簽文本。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.cos(x)
plt.plot(x,y,ls="-",lw=2,label="plot figure")
plt.legend()
plt.show()
(2)運行結果
運行結果如圖1.2所示。

圖1.2
1.3.2 函數scatter()——尋找變量之間的關系
函數功能:尋找變量之間的關系。
調用簽名:plt.scatter(x,y1,c="b",label="scatter figure")
參數說明
● x:x軸上的數值。
● y:y軸上的數值。
● c:散點圖中的標記的顏色。
● label:標記圖形內容的標簽文本。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.random.rand(1000)
plt.scatter(x,y,label="scatter figure")
plt.legend()
plt.show()
(2)運行結果
運行結果如圖1.3所示。

圖1.3
1.3.3 函數xlim()——設置x軸的數值顯示范圍
函數功能:設置x軸的數值顯示范圍。
調用簽名:plt.xlim(xmin,xmax)
參數說明
● xmin:x軸上的最小值。
● xmax:x軸上的最大值。
● 平移性:上面的函數功能,調用簽名和參數說明同樣可以平移到函數ylim()上。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.random.rand(1000)
plt.scatter(x,y,label="scatter figure")
plt.legend()
plt.xlim(0.05,10)
plt.ylim(0,1)
plt.show()
(2)運行結果
運行結果如圖1.4所示。

圖1.4
1.3.4 函數xlabel()——設置x軸的標簽文本
函數功能:設置x軸的標簽文本。
調用簽名:plt.xlabel(string)
參數說明
● string:標簽文本內容。
● 平移性:上面的函數功能,調用簽名和參數說明同樣可以平移到函數ylabel()上。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.show()
(2)運行結果
運行結果如圖1.5所示。

圖1.5
1.3.5 函數grid()——繪制刻度線的網格線
函數功能:繪制刻度線的網格線。
調用簽名:plt.grid(linestyle=":",color="r")
參數說明
● linestyle:網格線的線條風格。
● color:網格線的線條顏色。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.grid(linestyle=":",color="r")
plt.show()
(2)運行結果
運行結果如圖1.6所示。

圖1.6
1.3.6 函數axhline()——繪制平行于x軸的水平參考線
函數功能:繪制平行于x軸的水平參考線。
調用簽名:plt.axhline(y=0.0,c="r",ls="--",lw=2)
參數說明
● y:水平參考線的出發點。
● c:參考線的線條顏色。
● ls:參考線的線條風格。
● lw:參考線的線條寬度。
● 平移性:上面的函數功能,調用簽名和參數說明同樣可以平移到函數axvline()上。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.axhline(y=0.0,c="r",ls="--",lw=2)
plt.axvline(x=4.0,c="r",ls="--",lw=2)
plt.show()
(2)運行結果
運行結果如圖1.7所示。

圖1.7
1.3.7 函數axvspan()——繪制垂直于x軸的參考區域
函數功能:繪制垂直于x軸的參考區域。
調用簽名:plt.axvspan(xmin=1.0,xmax=2.0,facecolor="y",alpha=0.3)。
參數說明
● xmin:參考區域的起始位置。
● xmax:參考區域的終止位置。
● facecolor:參考區域的填充顏色。
● alpha:參考區域的填充顏色的透明度。
● 平移性:上面的函數功能、調用簽名和參數說明可以平移到函數axhspan()上。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.axvspan(xmin=4.0,xmax=6.0,facecolor="y",alpha=0.3)
plt.axhspan(ymin=0.0,ymax=0.5,facecolor="y",alpha=0.3)
plt.show()
(2)運行結果
運行結果如圖1.8所示。

圖1.8
1.3.8 函數annotate()——添加圖形內容細節的指向型注釋文本
函數功能:添加圖形內容細節的指向型注釋文本。
調用簽名:plt.annotate(string,xy=(np.pi/2,1.0),xytext=((np.pi/2)+0.15,1.5),weight="bold",color="b", arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))。
參數說明
● string:圖形內容的注釋文本。
● xy:被注釋圖形內容的位置坐標。
● xytext:注釋文本的位置坐標。
● weight:注釋文本的字體粗細風格。
● color:注釋文本的字體顏色。
● arrowprops:指示被注釋內容的箭頭的屬性字典。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.annotate("maximum",
xy=(np.pi/2,1.0),
xytext=((np.pi/2)+1.0,.8),
weight="bold",
color="b",
arrowprops
=dict(arrowstyle="->",connectionstyle="arc3",color="b"))
plt.show()
(2)運行結果
運行結果如圖1.9所示。

圖1.9
1.3.9 函數text()——添加圖形內容細節的無指向型注釋文本
函數功能:添加圖形內容細節的無指向型注釋文本。
調用簽名:plt.text(x,y,string,weight="bold",color="b")。
參數說明
● x:注釋文本內容所在位置的橫坐標。
● y:注釋文本內容所在位置的縱坐標。
● string:注釋文本內容。
● weight:注釋文本內容的粗細風格。
● color:注釋文本內容的字體顏色。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.text(3.10,0.09,"y=sin(x)",weight="bold",color="b")
plt.show()
(2)運行結果
運行結果如圖1.10所示。

圖1.10
1.3.10 函數title()——添加圖形內容的標題
函數功能:添加圖形內容的標題。
調用簽名:plt.title(string)。
參數說明
● string:圖形內容的標題文本。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.title("y=sin(x)")
plt.show()
(2)運行結果
運行結果如圖1.11所示。

圖1.11
1.3.11 函數legend()——標示不同圖形的文本標簽圖例
函數功能:標示不同圖形的文本標簽圖例。
調用簽名:plt.legend(loc="lower left")。
參數說明
● loc:圖例在圖中的地理位置。
調用展示
(1)代碼實現
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend(loc="lower left")
plt.show()
(2)運行結果
運行結果如圖1.12所示。

圖1.12
1.4 函數組合應用
1.3節將繪制圖1.1的重要組成元素的函數從函數功能、調用簽名、參數說明和調用展示等方面講解使用方法,進一步,在調用展示中又通過代碼實現和運行結果兩方面詳細解釋了繪制這些組成元素的函數的使用方法。因此,通過這些函數的多維度學習,讀者基本可以將圖1.1中的內容很好地復現出來,接下來,就讓我們看看繪制圖1.1的源代碼,如下所示。
在上面的源代碼中,除了用線框圈起來的部分我沒有闡述,其余部分都已經介紹過了,線框部分會在接下來的章節中詳細給大家講解。現在,讀者就動手輸入上面的代碼,看看輸出結果是什么樣的?能否感受到matplotlib繪圖的精細與精美?