數(shù)據(jù)分析之matplotlib的基本操作


哈嘍各位寶貝下午好啊
本期就由土豆來跟大家說一下
python的一個(gè)可視化工具matplotlib
他是數(shù)據(jù)分析中的畫圖模塊

先來說一下這個(gè)模塊的安裝
matplotlib的安裝教程(window)
首先,命令窗口輸入并執(zhí)行
python -m pip install -U pip setuptools
進(jìn)行升級(jí)
其次,輸入
python -m pip install matplotlib
進(jìn)行自動(dòng)的安裝,系統(tǒng)會(huì)自動(dòng)下載安裝包
最后
啟動(dòng)python終端會(huì)話,輸入
import matplotlib
沒有出現(xiàn)錯(cuò)誤信息,則安裝成功

matplotlib.pyplot 是命令樣式函數(shù)的集合,使matplotlib像MATLAB一樣工作。每個(gè)pyplot函數(shù)對(duì)圖形進(jìn)行一些更改:例如,創(chuàng)建圖形,在圖形中創(chuàng)建繪圖區(qū)域,在繪圖區(qū)域中繪制一些線條,用標(biāo)簽裝飾圖形等。
在matplotlib創(chuàng)建的圖像中,包含了多種元素,示例如下

figure
figure是圖片的載體,可以看做是畫布,圖片必須在畫布的基礎(chǔ)上進(jìn)行創(chuàng)建
axes
axes表示繪圖區(qū)域或者窗口,用來容納一張具體的圖片。axes位于figure上,同一個(gè)figure上可以存在多個(gè)axes。
axis
axis表示坐標(biāo)軸,比如常見的x軸,y軸以及對(duì)應(yīng)的刻度線和標(biāo)簽。
artist
atrist表示廣義的繪圖元件,往大了說,figure, axes, axis都屬于繪圖元件,往小了說,圖片標(biāo)題,圖例,刻度,刻度標(biāo)簽等一幅圖像上的具體元素都屬于繪圖元件。

在matplotlib中,有兩套繪圖語法,第一種是官方推薦的語法,是一種基于面向?qū)ο箫L(fēng)格的語法,基本用法如下
import matplotlib.pyplot as pltfig, ax = plt.subplots()ax.plot([1, 2, 3, 4], [1, 2, 3, 4])
同樣的一段繪圖代碼,在輸出圖像時(shí)可能輸出到png, pdf等各種不同的設(shè)備上。對(duì)于不同的繪圖設(shè)備,matplotlib內(nèi)置了輸出代碼,作為使用者的我們,不用關(guān)系具體的實(shí)現(xiàn)過程,只需要根據(jù)自己的需求,調(diào)整對(duì)應(yīng)的backend即可。
backend可以分為兩類:
1. 交互式設(shè)備,比如qt,wxpython等GUI窗口
2. 非交互式設(shè)備,比如png, jpeg, pdf等各種格式的文件
matplotlib支持的交互式設(shè)備列表如下

非交互式設(shè)備列表如下

Matplotlib.pyplot快速繪圖
快速繪圖和面向?qū)ο蠓绞嚼L圖
matplotlib實(shí)際上是一套面向?qū)ο蟮睦L圖庫,它所繪制的圖表中的每個(gè)繪圖元素,例如線條Line2D、文字Text、刻度等在內(nèi)存中都有一個(gè)對(duì)象與之對(duì)應(yīng)。
為了方便快速繪圖matplotlib通過pyplot模塊提供了一套和MATLAB類似的繪圖API,將眾多繪圖對(duì)象所構(gòu)成的復(fù)雜結(jié)構(gòu)隱藏在這套API內(nèi)部。我們只需要調(diào)用pyplot模塊所提供的函數(shù)就可以實(shí)現(xiàn)快速繪圖以及設(shè)置圖表的各種細(xì)節(jié)。pyplot模塊雖然用法簡單,但不適合在較大的應(yīng)用程序中使用。

為了將面向?qū)ο蟮睦L圖庫包裝成只使用函數(shù)的調(diào)用接口,pyplot模塊的內(nèi)部保存了當(dāng)前圖表以及當(dāng)前子圖等信息。當(dāng)前的圖表和子圖可以使用plt.gcf()和plt.gca()獲得,分別表示"Get Current Figure"和"Get Current Axes"。在pyplot模塊中,許多函數(shù)都是對(duì)當(dāng)前的Figure或Axes對(duì)象進(jìn)行處理,比如說:
plt.plot()實(shí)際上會(huì)通過plt.gca()獲得當(dāng)前的Axes對(duì)象ax,然后再調(diào)用ax.plot()方法實(shí)現(xiàn)真正的繪圖。
可以在Ipython中輸入類似"plt.plot??"的命令查看pyplot模塊的函數(shù)是如何對(duì)各種繪圖對(duì)象進(jìn)行包裝的。
配置屬性
matplotlib所繪制的圖表的每個(gè)組成部分都和一個(gè)對(duì)象對(duì)應(yīng),我們可以通過調(diào)用這些對(duì)象的屬性設(shè)置方法set_*()或者pyplot模塊的屬性設(shè)置函數(shù)setp()設(shè)置它們的屬性值。
因?yàn)閙atplotlib實(shí)際上是一套面向?qū)ο蟮睦L圖庫,因此也可以直接獲取對(duì)象的屬性
配置文件
繪制一幅圖需要對(duì)許多對(duì)象的屬性進(jìn)行配置,例如顏色、字體、線型等等。我們?cè)诶L圖時(shí),并沒有逐一對(duì)這些屬性進(jìn)行配置,許多都直接采用了matplotlib的缺省配置。
matplotlib將這些缺省配置保存在一個(gè)名為“matplotlibrc”的配置文件中,通過修改配置文件,我們可以修改圖表的缺省樣式。配置文件的讀入可以使用rc_params(),它返回一個(gè)配置字典;在matplotlib模塊載入時(shí)會(huì)調(diào)用rc_params(),并把得到的配置字典保存到rcParams變量中;matplotlib將使用rcParams字典中的配置進(jìn)行繪圖;用戶可以直接修改此字典中的配置,所做的改變會(huì)反映到此后創(chuàng)建的繪圖元素。

繪制多子圖
(快速繪圖)
Matplotlib 里的常用類的包含關(guān)系為 Figure -> Axes -> (Line2D, Text, etc.)一個(gè)Figure對(duì)象可以包含多個(gè)子圖(Axes),在matplotlib中用Axes對(duì)象表示一個(gè)繪圖區(qū)域,可以理解為子圖。
可以使用subplot()快速繪制包含多個(gè)子圖的圖表,它的調(diào)用形式如下:
subplot(numRows, numCols, plotNum)subplot將整個(gè)繪圖區(qū)域等分為numRows行* numCols列個(gè)子區(qū)域,然后按照從左到右,從上到下的順序?qū)γ總€(gè)子區(qū)域進(jìn)行編號(hào),左上的子區(qū)域的編號(hào)為1。如果numRows,numCols和plotNum這三個(gè)數(shù)都小于10的話,可以把它們縮寫為一個(gè)整數(shù),例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區(qū)域中創(chuàng)建一個(gè)軸對(duì)象。如果新創(chuàng)建的軸和之前創(chuàng)建的軸重疊的話,之前的軸將被刪除。

繪制多圖表
(快速繪圖)
如果需要同時(shí)繪制多幅圖表,可以給figure()傳遞一個(gè)整數(shù)參數(shù)指定Figure對(duì)象的序號(hào),如果序號(hào)所指定的Figure對(duì)象已經(jīng)存在,將不創(chuàng)建新的對(duì)象,而只是讓它成為當(dāng)前的Figure對(duì)象。
在圖表中顯示中文
matplotlib的缺省配置文件中所使用的字體無法正確顯示中文。為了讓圖表能正確顯示中文,可以有幾種解決方案。
在程序中直接指定字體。
在程序開頭修改配置字典rcParams。
修改配置文件。

面向?qū)ο螽媹D
matplotlib API包含有三層,Artist層處理所有的高層結(jié)構(gòu),例如處理圖表、文字和曲線等的繪制和布局。通常我們只和Artist打交道,而不需要關(guān)心底層的繪制細(xì)節(jié)。
直接使用Artists創(chuàng)建圖表的標(biāo)準(zhǔn)流程如下:
創(chuàng)建Figure對(duì)象
用Figure對(duì)象創(chuàng)建一個(gè)或者多個(gè)Axes或者Subplot對(duì)象
調(diào)用Axies等對(duì)象的方法創(chuàng)建各種簡單類型的Artists
Matplotlib.pylab快速繪圖
matplotlib還提供了一個(gè)名為pylab的模塊,其中包括了許多NumPy和pyplot模塊中常用的函數(shù),方便用戶快速進(jìn)行計(jì)算和繪圖,十分適合在IPython交互式環(huán)境中使用。

好啦,本期內(nèi)容就先到這里啦
我們下期再見哦

需要學(xué)習(xí)資料的可以添加土豆的微信領(lǐng)取哦



Python日志
內(nèi)容源自網(wǎng)絡(luò)
