天天看點

【Python可視化6】Seaborn之heatmap熱力圖

Seaborn是基于matplotlib的Python可視化庫。它提供了一個進階界面來繪制有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更進階的API封裝,進而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。

【Python可視化6】Seaborn之heatmap熱力圖

注:所有代碼均在IPython notebook中實作

·  正  ·  文  ·  來  ·  啦  ·

heatmap 熱力圖

熱力圖在實際中常用于展示一組變量的相關系數矩陣,在展示列聯表的資料分布上也有較大的用途,通過熱力圖我們可以非常直覺地感受到數值大小的差異狀況。heatmap的API如下所示:

【Python可視化6】Seaborn之heatmap熱力圖

下面将示範這些主要參數的用法,第一件事還是先導入相關的packages。

1import seaborn as sns
2%matplotlib inline
3sns.set(font_scale=1.5)      

本次示範采用的資料集是Seaborn中内置的flights航班資料集:

1#導入資料集後按年月兩個次元進行資料透視
2data=sns.load_dataset("flights")\
3        .pivot("month","year","passengers") 
4data.head()      
【Python可視化6】Seaborn之heatmap熱力圖

如上圖所示,dataframe中的資料代表了1949年-1960年每個月的航班乘客數量,接下來熱力圖就隆重登場啦!

1sns.set_context({"figure.figsize":(8,8)})
2sns.heatmap(data=data,square=True) 
3#可以看到熱力圖主要展示的是二維資料的資料關系
4#不同大小的值對應不同的顔色深淺      
【Python可視化6】Seaborn之heatmap熱力圖

熱力圖的右側是顔色帶,上面代表了數值到顔色的映射,數值由小到大對應色彩由暗到亮。從上面的heatmap中我們可以得到兩層資訊,一是随着時間的推移,飛機的乘客數量是在逐漸增多的,二是航班的乘坐旺季在七月和八月份。下面就具體的參數進行示範。

​vmax​

​​:設定顔色帶的最大值

​​

​vmin​

​:設定顔色帶的最小值

1sns.heatmap(data=data,vmin=200,
2            vmax=500)      
【Python可視化6】Seaborn之heatmap熱力圖

可以看到右側的顔色帶最大最小值變了,而heatmap中顔色映射關系也會随之調整,将本圖和上面的圖進行對比便一目了然。

​cmap​

​:設定顔色帶的色系

1sns.heatmap(data=data,cmap="RdBu_r")      
【Python可視化6】Seaborn之heatmap熱力圖

好像變好看了?

​center​

​:設定顔色帶的分界線

1sns.heatmap(data=data,cmap="RdBu_r",
2            center=300)      
【Python可視化6】Seaborn之heatmap熱力圖

細心的朋友可以察覺到顔色帶上色彩兩級的分界線變成了300

​annot​

​:是否顯示數值注釋

1sns.heatmap(data=data,annot=True,
2            cmap="RdBu_r")      
【Python可視化6】Seaborn之heatmap熱力圖

怎麼回事?亂碼了嗎?其實數值注釋預設顯示的是科學記數法的數值,我們得把數值進行格式化,這就用到了下面的參數。

​fmt​

​:format的縮寫,設定數值的格式化形式

1sns.heatmap(data=data,annot=True,
2            fmt="d",cmap="RdBu_r")
3#foramt為int類型      
【Python可視化6】Seaborn之heatmap熱力圖

​linewidths​

​:控制每個小方格之間的間距

1sns.heatmap(data=data,annot=True,
2            fmt="d",linewidths=0.3,
3            cmap="RdBu_r") 
4#可以看到每個小方格之産生了間隙      
【Python可視化6】Seaborn之heatmap熱力圖

​linecolor​

​:控制分割線的顔色

1sns.heatmap(data=data,annot=True,
2            fmt="d",linewidths=0.3,
3            linecolor="grey",cmap="RdBu_r")
4#原來的白色間隙變成了灰色間隙      
【Python可視化6】Seaborn之heatmap熱力圖

​cbar_kws​

​:關于顔色帶的設定

1sns.heatmap(data=data,annot=True,
2            fmt="d",cmap="RdBu_r",
3            cbar_kws={"orientation":"horizontal"})  
4#橫向顯示顔色幫      
【Python可視化6】Seaborn之heatmap熱力圖

​mask​

​:傳入布爾型矩陣,若為矩陣内為True,則熱力圖相應的位置的資料将會被屏蔽掉(常用在繪制相關系數矩陣圖)

1import numpy as np
 2#随機生成一個200行10列的資料集
 3data_new = np.random.randn(200,10)
 4
 5#求出這個資料集的相關系數矩陣
 6corr = np.corrcoef(data_new,rowvar=False)
 7
 8#以corr的形狀生成一個全為0的矩陣
 9mask = np.zeros_like(corr)
10
11#将mask的對角線及以上設定為True
12#這部分就是對應要被遮掉的部分
13mask[np.triu_indices_from(mask)] = True
14
15with sns.axes_style("white"):
16    sns.heatmap(corr, mask=mask, vmax=0.3, 
17                annot=True,cmap="RdBu_r")      
【Python可視化6】Seaborn之heatmap熱力圖