本篇博客所有示例使用Jupyter NoteBook演示。
Python數據處理系列筆記基於:Python數據科學手冊電子版 下載密碼:ovnh
示例代碼 下載密碼:02f4
目錄
一、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中會有專門的接口):