Python可視化 | Seaborn5分鐘入門(六)——heatmap熱力圖

微信公衆號:「Python讀財」
若有問題或建議,請公衆號留言

Seaborn是基於matplotlib的Python可視化庫。它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn實際上是在matplotlib的基礎上進行了更高級的API封裝,從而使得做圖更加容易,不須要通過大量的調整就能使你的圖變得精緻。微信

image

注:全部代碼均在IPython notebook中實現dom

heatmap 熱力圖

熱力圖在實際中經常使用於展現一組變量的相關係數矩陣,在展現列聯表的數據分佈上也有較大的用途,經過熱力圖咱們能夠很是直觀地感覺到數值大小的差別情況。heatmap的API以下所示:學習

image

下面將演示這些主要參數的用法,第一件事仍是先導入相關的packages。spa

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

本次演示採用的數據集是Seaborn中內置的flights航班數據集3d

#導入數據集後按年月兩個維度進行數據透視
data=sns.load_dataset("flights")\
        .pivot("month","year","passengers") 
data.head() 

image

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

sns.set_context({"figure.figsize":(8,8)})
sns.heatmap(data=data,square=True) 
#能夠看到熱力圖主要展現的是二維數據的數據關係
#不一樣大小的值對應不一樣的顏色深淺

image

熱力圖的右側是顏色帶,上面表明了數值到顏色的映射,數值由小到大對應色彩由暗到亮。從上面的heatmap中咱們能夠獲得兩層信息,一是隨着時間的推移,飛機的乘客數量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具體的參數進行演示。orm

vmax:設置顏色帶的最大值
vmin:設置顏色帶的最小值blog

sns.heatmap(data=data,vmin=200,vmax=500)

image

能夠看到右側的顏色帶最大最小值變了,而heatmap中顏色映射關係也會隨之調整,將本圖和上面的圖進行對比便一目瞭然。rem

cmap:設置顏色帶的色系文檔

sns.heatmap(data=data,cmap="RdBu_r")

image

好像變好看了?

center:設置顏色帶的分界線

sns.heatmap(data=data,cmap="RdBu_r",center=300)

  image

細心的朋友能夠察覺到顏色帶上色彩兩級的分界線變成了300

annot:是否顯示數值註釋

sns.heatmap(data=data,annot=True,cmap="RdBu_r")

image

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

fmt:format的縮寫,設置數值的格式化形式

sns.heatmap(data=data,annot=True,fmt="d",cmap="RdBu_r")
#foramt爲int類型

image

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

sns.heatmap(data=data,annot=True,fmt="d",linewidths=0.3,cmap="RdBu_r") 
#能夠看到每一個小方格之產生了間隙

image

linecolor:控制分割線的顏色

sns.heatmap(data=data,annot=True,fmt="d",linewidths=0.3,linecolor="grey",cmap="RdBu_r")
#原來的白色間隙變成了灰色間隙

image

cbar_kws:關於顏色帶的設置

sns.heatmap(data=data,annot=True,fmt="d",cmap="RdBu_r",
                      cbar_kws={"orientation":"horizontal"}) 
#橫向顯示顏色幫

image

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")

image

若是你們對上面的代碼流程不大瞭解,能夠把mask打印出來看看

image

參照mask和上面繪製的圖,應該就很容易理解了,mask中爲1的部分,就是要被蓋掉的部分。演示到此爲止,想更深刻的學習能夠自行查閱官方文檔!

掃碼關注公衆號「Python讀財」,第一時間獲取乾貨!!
公衆號二維碼.jpg

相關文章
相關標籤/搜索