熱力圖
1、利用熱力圖可以看數(shù)據(jù)表里多個(gè)特征兩兩的相似度合砂。參考官方API參數(shù)及地址:
seaborn.heatmap(data, vmin=None, vmax=None,cmap=None, center=None, robust=False, annot=None, fmt=’.2g’, annot_kws=None,linewidths=0, linecolor=’white’, cbar=True, cbar_kws=None, cbar_ax=None,square=False, xticklabels=’auto’, yticklabels=’auto’, mask=None, ax=None,**kwargs)
(1)熱力圖輸入數(shù)據(jù)參數(shù):
data:矩陣數(shù)據(jù)集,可以是numpy的數(shù)組(array),也可以是pandas的DataFrame。如果是DataFrame导而,則df的index/column信息會(huì)分別對(duì)應(yīng)到heatmap的columns和rows,即pt.index是熱力圖的行標(biāo)隔崎,pt.columns是熱力圖的列標(biāo)
(2)熱力圖矩陣塊顏色參數(shù):
vmax,vmin:分別是熱力圖的顏色取值最大和最小范圍今艺,默認(rèn)是根據(jù)data數(shù)據(jù)表里的取值確定?
cmap:從數(shù)字到色彩空間的映射,取值是matplotlib包里的colormap名稱(chēng)或顏色對(duì)象爵卒,或者表示顏色的列表虚缎;改參數(shù)默認(rèn)值:根據(jù)center參數(shù)設(shè)定?
center:數(shù)據(jù)表取值有差異時(shí),設(shè)置熱力圖的色彩中心對(duì)齊值钓株;通過(guò)設(shè)置center值实牡,可以調(diào)整生成的圖像顏色的整體深淺;設(shè)置center數(shù)據(jù)時(shí)轴合,如果有數(shù)據(jù)溢出创坞,則手動(dòng)設(shè)置的vmax、vmin會(huì)自動(dòng)改變?
robust:默認(rèn)取值False受葛;如果是False题涨,且沒(méi)設(shè)定vmin和vmax的值,熱力圖的顏色映射范圍根據(jù)具有魯棒性的分位數(shù)設(shè)定总滩,而不是用極值設(shè)定
(3)熱力圖矩陣塊注釋參數(shù):
annot(annotate的縮寫(xiě)):默認(rèn)取值False纲堵;如果是True,在熱力圖每個(gè)方格寫(xiě)入數(shù)據(jù)闰渔;如果是矩陣席函,在熱力圖每個(gè)方格寫(xiě)入該矩陣對(duì)應(yīng)位置數(shù)據(jù)?
fmt:字符串格式代碼,矩陣上標(biāo)識(shí)數(shù)字的數(shù)據(jù)格式澜建,比如保留小數(shù)點(diǎn)后幾位數(shù)字?
annot_kws:默認(rèn)取值False向挖;如果是True,設(shè)置熱力圖矩陣上數(shù)字的大小顏色字體炕舵,matplotlib包text類(lèi)下的字體設(shè)置;官方文檔:
(4)熱力圖矩陣塊之間間隔及間隔線參數(shù):
linewidths:定義熱力圖里“表示兩兩特征關(guān)系的矩陣小塊”之間的間隔大小?
linecolor:切分熱力圖上每個(gè)矩陣小塊的線的顏色跟畅,默認(rèn)值是’white’
(5)熱力圖顏色刻度條參數(shù):
cbar:是否在熱力圖側(cè)邊繪制顏色刻度條咽筋,默認(rèn)值是True?
cbar_kws:熱力圖側(cè)邊繪制顏色刻度條時(shí),相關(guān)字體設(shè)置徊件,默認(rèn)值是None?
cbar_ax:熱力圖側(cè)邊繪制顏色刻度條時(shí)奸攻,刻度條位置設(shè)置蒜危,默認(rèn)值是None
(6)square:設(shè)置熱力圖矩陣小塊形狀,默認(rèn)值是False
xticklabels, yticklabels:xticklabels控制每列標(biāo)簽名的輸出睹耐;yticklabels控制每行標(biāo)簽名的輸出辐赞。默認(rèn)值是auto。如果是True硝训,則以DataFrame的列名作為標(biāo)簽名响委。如果是False,則不添加行標(biāo)簽名窖梁。如果是列表赘风,則標(biāo)簽名改為列表中給的內(nèi)容。如果是整數(shù)K纵刘,則在圖上每隔K個(gè)標(biāo)簽進(jìn)行一次標(biāo)注邀窃。 如果是auto,則自動(dòng)選擇標(biāo)簽的標(biāo)注間距假哎,將標(biāo)簽名不重疊的部分(或全部)輸出?
mask:控制某個(gè)矩陣塊是否顯示出來(lái)瞬捕。默認(rèn)值是None。如果是布爾型的DataFrame舵抹,則將DataFrame里True的位置用白色覆蓋掉?
ax:設(shè)置作圖的坐標(biāo)軸山析,一般畫(huà)多個(gè)子圖時(shí)需要修改不同的子圖的該值?
**kwargs:All other keyword arguments are passed to ax.pcolormesh
熱力圖矩陣塊顏色參數(shù)
#cmap(顏色)
import matplotlib.pyplot as plt
import numpy as np
% matplotlib inline
f, (ax1,ax2) = plt.subplots(figsize = (6,4),nrows=2)
# cmap用cubehelix map顏色
cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True)
sns.heatmap(pt, linewidths = 0.05, ax = ax1, vmax=900, vmin=0, cmap=cmap)
pt = np.random.randint(low=0,high=900,size=(8,8))
ax1.set_title('cubehelix map')
ax1.set_xlabel('')
ax1.set_xticklabels([]) #設(shè)置x軸圖例為空值
ax1.set_ylabel('kind')
# cmap用matplotlib colormap
sns.heatmap(pt, linewidths = 0.05, ax = ax2, vmax=900, vmin=0, cmap='rainbow')
# rainbow為 matplotlib 的colormap名稱(chēng)
ax2.set_title('matplotlib colormap')
ax2.set_xlabel('region')
ax2.set_ylabel('kind')
#center的用法(顏色)
f, (ax1,ax2) = plt.subplots(figsize = (6, 4),nrows=2)
f, (ax1,ax2) = plt.subplots(figsize = (6,4),nrows=2)
cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True)
sns.heatmap(pt, linewidths = 0.05, ax = ax1, cmap=cmap, center=None )
ax1.set_title('center=None')
ax1.set_xlabel('')
ax1.set_xticklabels([]) #設(shè)置x軸圖例為空值ax1.set_ylabel('kind')# 當(dāng)center設(shè)置小于數(shù)據(jù)的均值時(shí),生成的圖片顏色要向0值代表的顏色一段偏移sns.heatmap(pt, linewidths = 0.05, ax = ax2, cmap=cmap, center=200)?
ax2.set_title('center=3000')
ax2.set_xlabel('region')
ax2.set_ylabel('kind')
#annot(矩陣上數(shù)字),annot_kws(矩陣上數(shù)字的大小顏色字體)matplotlib包text類(lèi)下的字體設(shè)置import numpy as np
np.random.seed(20180316)
x = np.random.randn(4, 4)
f, (ax1, ax2) = plt.subplots(figsize=(6,6),nrows=2)
sns.heatmap(x, annot=True, ax=ax1)
sns.heatmap(x, annot=True, ax=ax2, annot_kws={'size':9,'weight':'bold', 'color':'blue'})
#fmt(字符串格式代碼掏父,矩陣上標(biāo)識(shí)數(shù)字的數(shù)據(jù)格式笋轨,比如保留小數(shù)點(diǎn)后幾位數(shù)字)
import numpy as np
np.random.seed(0)
x = np.random.randn(4,4)
f, (ax1, ax2) = plt.subplots(figsize=(6,6),nrows=2)
sns.heatmap(x, annot=True, ax=ax1)
sns.heatmap(x, annot=True, fmt='.1f', ax=ax2)
熱力圖矩陣塊之間間隔及間隔線參數(shù)
#linewidths(矩陣小塊的間隔),linecolor(切分熱力圖矩陣小塊的線的顏色)
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize = (6,4))
cmap = sns.cubehelix_palette(start = 1, rot = 3, gamma=0.8, as_cmap = True)?
sns.heatmap(pt, cmap = cmap, linewidths = 0.05, linecolor= 'red', ax = ax)?
ax.set_title('Amounts per kind and region')
ax.set_xlabel('region')
ax.set_ylabel('kind')
#xticklabels,yticklabels橫軸和縱軸的標(biāo)簽名輸出import matplotlib.pyplot as plt
f, (ax1,ax2) = plt.subplots(figsize = (5,5),nrows=2)
cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True)
p1 = sns.heatmap(pt, ax=ax1, cmap=cmap, center=None, xticklabels=False)
ax1.set_title('xticklabels=None',fontsize=8)
p2 = sns.heatmap(pt, ax=ax2, cmap=cmap, center=None, xticklabels=2, yticklabels=list(range(5)))
ax2.set_title('xticklabels=2, yticklabels is a list',fontsize=8)
ax2.set_xlabel('region')
#mask對(duì)某些矩陣塊的顯示進(jìn)行覆蓋
f, (ax1,ax2) = plt.subplots(figsize = (5,5),nrows=2)
cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True)
p1 = sns.heatmap(pt, ax=ax1, cmap=cmap, xticklabels=False, mask=None)
ax1.set_title('mask=None')
ax1.set_ylabel('kind')
p2 = sns.heatmap(pt, ax=ax2, cmap=cmap, xticklabels=True, mask=(pt<800))?
#mask對(duì)pt進(jìn)行布爾型轉(zhuǎn)化,結(jié)果為T(mén)rue的位置用白色覆蓋
ax2.set_title('mask: boolean DataFrame')
ax2.set_xlabel('region')
ax2.set_ylabel('kind')
用mask實(shí)現(xiàn):突出顯示某些數(shù)據(jù)
f,(ax1,ax2) = plt.subplots(figsize=(4,6),nrows=2)
x = np.array([[1,2,3],[2,0,1],[-1,-2,0]])
sns.heatmap(x, annot=True, ax=ax1)
sns.heatmap(x, mask=x < 1, ax=ax2, annot=True, annot_kws={"weight": "bold"})? #把小于1的區(qū)域覆蓋掉
參考:http://www.php.cn/python-tutorials-391565.html