Python數據處理 | (三) Matplotlib數據可視化

本篇博客所有示例使用Jupyter NoteBook演示。

Python數據處理系列筆記基於:Python數據科學手冊電子版  下載密碼:ovnh

示例代碼  下載密碼:02f4

 

目錄

一、Matplotlib常用技巧

1.導入Matplotlib

2.設置繪圖樣式

3.用不用show()?如何顯示圖形

4.將圖形保存爲文件

二、兩種畫圖接口

1.MATLAB風格接口

2.面向對象接口

三、簡易折線圖

1.調整圖形:線條的顏色與風格

2.調整圖形:座標軸上下限

3.設置圖形標籤

四、簡易散點圖

1.用plt.plot畫散點圖

2.用plt.scatter畫散點圖

3.plot與scatter:效率對比

五、可視化異常處理

1.基本誤差線

2.連續誤差

六、密度圖和等高線圖

1.三維函數的可視化

七、頻次直方圖、數據區間劃分和分佈密度

1.二維頻次直方圖與數據區間劃分

八、配置圖例

1.選擇圖例顯示的元素

2.在圖例中顯示不同尺寸的點

3.同時顯示多個圖例

九、配置顏色條

1.配置顏色條

2.案例:手寫數字

十、多子圖

1.plt.axes:手動創建子圖

2.plt.subplot:簡易網格子圖

3.plt.subplots:一行代碼創建網格

4.plt.GridSpec:實現更復雜的排列方式

十一、文字與註釋

1.案例:節假日對美國出生率的影響

2.座標變換與文字位置

3.箭頭與註釋

十二、自定義座標軸刻度

1.主要刻度與次要刻度

2.隱藏刻度與標籤

3.增減刻度數量

4.花哨的刻度格式

5.格式生成器與定位器小結

十三、Matplotlib自定義:配置文件與樣式表

1.手動配置圖形

2.修改默認配置:rcParams

3.樣式表

十四、用Matplotlib畫三維圖

1.三維數據點與線

2.三維等高線圖

3.線框圖和曲面圖

4.曲面三角剖分

十五、用Basemap可視化地理數據

1.地圖投影

2.畫一個地圖背景

3.在地圖上畫數據

4.案例:美國加州城市數據

5.案例:地表溫度數據

十六、用Seaborn做數據可視化

1.Seaborn與Matplotlib

2.Seaborn圖形介紹

3.案例:探索馬拉松比賽成績數據


一、Matplotlib常用技巧

1.導入Matplotlib

2.設置繪圖樣式

3.用不用show()?如何顯示圖形

  • 在腳本中畫圖

如果在腳本文件或集成環境中使用Matplotlib,顯示圖形必須使用plt.show():

注意一個Python會話只能使用一次plt.show(),通常放在腳本最後;多個plt.show()會導致異常。

  • 在Ipython shell中畫圖

在Ipython shell中啓動Matplotlib模式後,就不需要使用plt.show().

此後任何plt命令都會自動打開一個圖形窗口,增加新命令,圖形就會更新。

有一些變化,如改變已經畫好的線條屬性不會自動及時更新,可以使用plt.draw()強制更新。

  • 在Ipython Notebook中畫圖

將圖形直接嵌在IPython Notebook頁面中,有兩種形式上:

1)%matplotlib notebook會在Notebook中啓動交互式圖形

2)%matplotlib inline會在Notebook中啓動靜態圖形

統一使用2):

4.將圖形保存爲文件

可以用savefig()把圖形保存爲不同的數據格式:

查看系統支持的文件格式:

保存圖像文件不需要使用plt.show()等命令。

二、兩種畫圖接口

1.MATLAB風格接口

這種接口是有狀態的:會持續跟蹤當前的圖形和座標軸,所有plt命令都可以用:

這種接口當創建第二個子圖時,如果再回到第一個子圖增加內容,會很複雜。

2.面向對象接口

畫簡單圖形時,二者看個人喜好;畫比較複雜的圖形時,面向對象方法會更方便。

三、簡易折線圖

在Notebook中畫圖,需要先導入:

首先需要創建一個圖形fig和一個座標軸ax:

然後用ax.plot畫圖(面向對象接口):

plt.plot() Matplotlib接口:

在一幅圖中畫多條曲線,可以重複調用plot:

1.調整圖形:線條的顏色與風格

設置曲線顏色,用color參數,有多種表示方法:

如果不知道顏色,會爲多條曲線默認使用一組顏色。

可以用linestyle參數調整線條風格:

組合color和linestyle參數:

2.調整圖形:座標軸上下限

也可以使用plt.axis()設置範圍:

plt.axis()還可以設置佈局:

3.設置圖形標籤

設置圖形標題和座標標題:

單圖顯示多條曲線時,設置圖例:

絕大多數Matlab接口和麪向對象接口是通用的,如plt.plot()和ax.plot(),plt.legend()和ax.legend()等,也有一些稍有不同,二者轉換如下:

使用面向對象接口時,一般不單獨調用這些函數,而是用ax.set()統一設置:

四、簡易散點圖

1.用plt.plot畫散點圖

演示一些不同的圖形標記:

圖形標記可以與線條和顏色結合使用:

設置散點和線條的屬性:

2.用plt.scatter畫散點圖

與plt.plot()相比,plt.scatter()創建散點圖更靈活:

引入鳶尾花數據集,feature[0]是花萼長度,feature[1]是花萼寬度,圖中點的大小代表feature[3]花瓣的寬度,三種顏色對應三種類型的鳶尾花:

3.plot與scatter:效率對比

對於小型數據集,二者差異不大;對於大型數據集,plot比scatter快很多。

原因在於plot中散點基本彼此複製,整個數據集中所有點的顏色、尺寸只需要配置一次;scatter會對每個散點進行單獨的大小與顏色的渲染。

五、可視化異常處理

1.基本誤差線

改善選項,一般誤差線顏色比數據點顏色淺一點比較好:

可以設置水平誤差線、單側誤差線等。可以參考程序文檔plt.errorbar.

2.連續誤差

有時需要顯示連續變量的誤差:

通過高斯過程迴歸方法,演示對帶有不確定性的連續測量值進行擬合:

fill_between首先傳入x軸座標值,然後傳入y軸下邊界,以及上邊界,接下來是一些線條屬性設置。,整個區域被誤差線填充。

擬合效果:在接近樣本點的區域,模型受很強的約束,擬合誤差很小,接近真實值;遠離樣本點的區域,模型不受約束,誤差不斷增大。

六、密度圖和等高線圖

1.三維函數的可視化

等高線圖可視化三維數據:

查看所有配色方案:

可以用plt.contourf()來填充等高線,語法和plt.contour()一致:

通過plt.imshow(),將2維數組渲染成漸變圖:

imshow()注意事項:

1)plt.imshow()不支持x軸和y軸數據設置網格,必須通過extent參數設置圖形的座標範圍[xmin,xmax,ymin,ymax

2)  plt.imshow()原點在左上角,而不是絕大多數等高線圖使用的左下角。在顯示網格數據圖形時必須調整

3)plt.imshow()會自動調整座標軸的精度以適應數據顯示。可以通過plt.axis(aspect='image')設置x和y軸的單位

將等高線圖與彩色圖結合:如將一幅背景爲半透明的彩色圖(alpha設置透明度),與另一幅座標相同、帶數據標籤的等高線圖疊放在一起(plt.clabel()):

七、頻次直方圖、數據區間劃分和分佈密度

一個簡易的頻次直方圖:

個性化的頻次直方圖:

同坐標軸多個頻次直方圖:

簡單計算每個區間內的樣本數,不想畫圖:

1.二維頻次直方圖與數據區間劃分

就像把一維數組分爲區間創建一維頻次直方圖一樣,可以將2維數組按照2維區間劃分,創建2維頻次直方圖:

  • plt.hist2d:2維頻次直方圖

與hist一樣hist2d也有很多其他配置選項。

如果不想畫圖,只想查看計算結果:

  • plt.hexbin:六邊形區間劃分

2維頻次直方圖是與座標軸正交的方塊分割而成的,比較常用的是用正六邊形分割:

  • 核密度估計

用於評估多維數據分佈密度的常用方法,KDE。

演示用KDE抹去空間中離散的數據點,擬合出一個平滑的函數:

 

八、配置圖例

可以使用plt.legend()/ax.legend()來創建最簡單的圖例,它會自動創建一個包含每個圖形元素的圖例:

個性化圖例設置:

1.選擇圖例顯示的元素

圖例會默認顯示所有元素的標籤,也可以不顯示全部:

也可以爲要顯示的圖例設置標籤:

2.在圖例中顯示不同尺寸的點

有時可能需要用不同尺寸的點表示數據特徵,希望創建這樣的圖例來反應這些特徵。

下面有點的尺寸來表示美國加州不同城市的面積,顏色代表不同城市的人口數,通過一個不同尺寸的點來顯示不同面積的圖例:

 加州城市數據集       下載密碼:94pq

3.同時顯示多個圖例

如果要在一張圖上顯示多個圖例不太容易,legend()只能爲一張圖設置第一個圖例,再設置圖例第一個會被覆蓋。

可以通過如下方法實現:

九、配置顏色條

創建最簡單的顏色條:

1.配置顏色條

通過cmap參數設置顏色條配色方案:

查看所有配色方案:

  • 選擇配色方案

一般情況下只需重點關注三種不同的配色方案:

1)順序配色方案:由一組連續的顏色構成的配色方案(binary或viridis)

2)互逆配色方案:由兩種互補的顏色構成,表示正反兩種含義(RdBu或PuOr)

3)定性配色方案:隨機順序的一組顏色(rainbow或jet)

可以通過把配色方案轉換成黑白的灰度圖看看具體的顏色:

上圖中灰度圖中比較亮的條紋。這些亮度變化不均勻的條紋在彩色圖中對應一段區間,由於色彩太接近容易凸顯出數據集中不重要的部分,jet不是一種好的配色方案,更好的是viridis。

彩虹效果,可以用cubehelix配色方案可視化連續的數值:

要用兩種顏色表示正反兩種含義時,可使用RdBu雙色配色方案:

  • 顏色條刻度的限制與擴展功能的設置

顏色條本身可以看作一個plt.Axes的實例,之前學習的關於座標軸和刻度紙的格式配置都可以用。

我們還可以縮短顏色取值的上下限,對於超出上下限的數據,通過extend用三角箭頭表示比上限大的數或比下限小的數。

左圖用默認的顏色條刻度限制實現的效果,噪點的範圍完全覆蓋了我們感興趣的數據。

右圖設置了顏色條刻度的上下限,並在上下限之外增加了擴展功能,這樣數據可視化圖形顯然更有效果。

  • 離散型顏色條

顏色條默認是連續的,有時可能需要表示離散數據:

2.案例:手寫數字

下載手寫數字數據集,對一些數字可視化:

每個數字由64個像素構成,每個數字可以看作一個64維空間中的點,每個維度表示一個像素的亮度。

可視化高維空間非常困難,一種解決方法是降維,在儘量保留數據內部重要關聯性的同時降低數據的維度,如流形學習:

使用流形學習將數字投影到2維空間並可視化:

數字3和5投影面積有重疊,說明手寫3,5難以區分,自動分類算法容易搞混;

其他數字如0和1,隔得比較遠,說明2者不太可能出現混淆。

十、多子圖

1.plt.axes:手動創建子圖

plt.axes默認創建一個標準座標軸,圖形座標系統由四個值組成[底座標,左座標,寬度,高度],取值範圍爲左下角爲原點(0),右上角爲1.

創建兩個豎直排列的座標軸:

上子圖起點座標y爲0.5位置,與下子圖對應,起點y座標爲0.1位置,高度爲0.4

2.plt.subplot:簡易網格子圖

創建彼此對齊的行列子圖:

面向對象接口可實現同樣的效果:

3.plt.subplots:一行代碼創建網格

4.plt.GridSpec:實現更復雜的排列方式

實現不規則的多行多列子圖網格:

創建多軸頻次直方圖(後續的Seaborn中會有專門的接口):

十一、文字與註釋

1.案例:節假日對美國出生率的影響

2.座標變換與文字位置

3.箭頭與註釋

十二、自定義座標軸刻度

1.主要刻度與次要刻度

2.隱藏刻度與標籤

3.增減刻度數量

4.花哨的刻度格式

5.格式生成器與定位器小結

十三、Matplotlib自定義:配置文件與樣式表

1.手動配置圖形

2.修改默認配置:rcParams

3.樣式表

十四、用Matplotlib畫三維圖

1.三維數據點與線

2.三維等高線圖

3.線框圖和曲面圖

4.曲面三角剖分

十五、用Basemap可視化地理數據

1.地圖投影

2.畫一個地圖背景

3.在地圖上畫數據

4.案例:美國加州城市數據

5.案例:地表溫度數據

十六、用Seaborn做數據可視化

1.Seaborn與Matplotlib

2.Seaborn圖形介紹

3.案例:探索馬拉松比賽成績數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章