微信公眾號:「Python讀財」
如有問題或建議,請公眾號留言
Seaborn是基於matplotlib的Python視覺化庫。它提供了一個高階介面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高階的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。
注:所有程式碼均在IPython notebook中實現
heatmap 熱力圖
熱力圖在實際中常用於展示一組變數的相關係數矩陣,在展示列聯表的資料分佈上也有較大的用途,透過熱力圖我們可以非常直觀地感受到數值大小的差異狀況。heatmap的API如下所示:
下面將演示這些主要引數的用法,第一件事還是先匯入相關的packages。
import seaborn as sns
%matplotlib inline
sns.set(font_scale=1.5)
本次演示採用的資料集是Seaborn中內建的flights航班資料集:
#匯入資料集後按年月兩個維度進行資料透視
data=sns.load_dataset("flights")\
.pivot("month","year","passengers")
data.head()
如上圖所示,dataframe中的資料代表了1949年-1960年每個月的航班乘客數量,接下來熱力圖就隆重登場啦!
sns.set_context({"figure.figsize":(8,8)})
sns.heatmap(data=data,square=True)
#可以看到熱力圖主要展示的是二維資料的資料關係
#不同大小的值對應不同的顏色深淺
熱力圖的右側是顏色帶,上面代表了數值到顏色的對映,數值由小到大對應色彩由暗到亮。從上面的heatmap中我們可以得到兩層資訊,一是隨著時間的推移,飛機的乘客數量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具體的引數進行演示。
vmax
:設定顏色帶的最大值vmin
:設定顏色帶的最小值
sns.heatmap(data=data,vmin=200,vmax=500)
可以看到右側的顏色帶最大最小值變了,而heatmap中顏色對映關係也會隨之調整,將本圖和上面的圖進行對比便一目瞭然。
cmap
:設定顏色帶的色系
sns.heatmap(data=data,cmap="RdBu_r")
好像變好看了?
center
:設定顏色帶的分界線
sns.heatmap(data=data,cmap="RdBu_r",center=300)
細心的朋友可以察覺到顏色帶上色彩兩級的分界線變成了300
annot
:是否顯示數值註釋
sns.heatmap(data=data,annot=True,cmap="RdBu_r")
怎麼回事?亂碼了嗎?其實數值註釋預設顯示的是科學記數法的數值,我們得把數值進行格式化,這就用到了下面的引數。
fmt
:format的縮寫,設定數值的格式化形式
sns.heatmap(data=data,annot=True,fmt="d",cmap="RdBu_r")
#foramt為int型別
linewidths
:控制每個小方格之間的間距
sns.heatmap(data=data,annot=True,fmt="d",linewidths=0.3,cmap="RdBu_r")
#可以看到每個小方格之產生了間隙
linecolor
:控制分割線的顏色
sns.heatmap(data=data,annot=True,fmt="d",linewidths=0.3,linecolor="grey",cmap="RdBu_r")
#原來的白色間隙變成了灰色間隙
cbar_kws
:關於顏色帶的設定
sns.heatmap(data=data,annot=True,fmt="d",cmap="RdBu_r",
cbar_kws={"orientation":"horizontal"})
#橫向顯示顏色幫
mask
:傳入布林型矩陣,若為矩陣內為True,則熱力圖相應的位置的資料將會被遮蔽掉(常用在繪製相關係數矩陣圖)
import numpy as np
#隨機生成一個200行10列的資料集
data_new = np.random.randn(200,10)
#求出這個資料集的相關係數矩陣 corr = np.corrcoef(data_new,rowvar=False)
#以corr的形狀生成一個全為0的矩陣
mask = np.zeros_like(corr)
#將mask的對角線及以上設定為True
#這部分就是對應要被遮掉的部分mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
sns.heatmap(corr, mask=mask, vmax=0.3, annot=True,cmap="RdBu_r")
如果大家對上面的程式碼流程不大瞭解,可以把mask列印出來看看
參照mask和上面繪製的圖,應該就很容易理解了,mask中為1的部分,就是要被蓋掉的部分。演示到此為止,想更深入的學習可以自行查閱官方文件!
掃碼關注公眾號「Python讀財」,第一時間獲取乾貨!!
本作品採用《CC 協議》,轉載必須註明作者和本文連結