python熱力圖

利用熱力圖可以看數(shù)據(jù)表里多個特征兩兩的相似度昆婿。參考官方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)

熱力圖輸入數(shù)據(jù)參數(shù):

data:矩陣數(shù)據(jù)集,可以是numpy的數(shù)組(array)百框,也可以是pandas的DataFrame恢共。如果是DataFrame晃听,則df的index/column信息會分別對應(yīng)到heatmap的columns和rows,即pt.index是熱力圖的行標(biāo)诺祸,pt.columns是熱力圖的列標(biāo)

熱力圖矩陣塊顏色參數(shù):

vmax,vmin:分別是熱力圖的顏色取值最大和最小范圍携悯,默認(rèn)是根據(jù)data數(shù)據(jù)表里的取值確定

cmap:從數(shù)字到色彩空間的映射,取值是matplotlib包里的colormap名稱或顏色對象筷笨,或者表示顏色的列表憔鬼;改參數(shù)默認(rèn)值:根據(jù)center參數(shù)設(shè)定

center:數(shù)據(jù)表取值有差異時,設(shè)置熱力圖的色彩中心對齊值胃夏;通過設(shè)置center值轴或,可以調(diào)整生成的圖像顏色的整體深淺;設(shè)置center數(shù)據(jù)時仰禀,如果有數(shù)據(jù)溢出照雁,則手動設(shè)置的vmax、vmin會自動改變

robust:默認(rèn)取值False答恶;如果是False饺蚊,且沒設(shè)定vmin和vmax的值,熱力圖的顏色映射范圍根據(jù)具有魯棒性的分位數(shù)設(shè)定悬嗓,而不是用極值設(shè)定

熱力圖矩陣塊注釋參數(shù):

annot(annotate的縮寫):默認(rèn)取值False污呼;如果是True,在熱力圖每個方格寫入數(shù)據(jù)包竹;如果是矩陣燕酷,在熱力圖每個方格寫入該矩陣對應(yīng)位置數(shù)據(jù)

fmt:字符串格式代碼籍凝,矩陣上標(biāo)識數(shù)字的數(shù)據(jù)格式,比如保留小數(shù)點后幾位數(shù)字

annot_kws:默認(rèn)取值False苗缩;如果是True饵蒂,設(shè)置熱力圖矩陣上數(shù)字的大小顏色字體,matplotlib包text類下的字體設(shè)置酱讶;官方文檔:https://matplotlib.org/api/text_api.html#matplotlib.text.Text

熱力圖矩陣塊之間間隔及間隔線參數(shù):

linewidths:定義熱力圖里“表示兩兩特征關(guān)系的矩陣小塊”之間的間隔大小

linecolor:切分熱力圖上每個矩陣小塊的線的顏色退盯,默認(rèn)值是’white’

熱力圖顏色刻度條參數(shù):

cbar:是否在熱力圖側(cè)邊繪制顏色刻度條,默認(rèn)值是True

cbar_kws:熱力圖側(cè)邊繪制顏色刻度條時浴麻,相關(guān)字體設(shè)置得问,默認(rèn)值是None

cbar_ax:熱力圖側(cè)邊繪制顏色刻度條時,刻度條位置設(shè)置软免,默認(rèn)值是None

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個標(biāo)簽進行一次標(biāo)注沛简。 如果是auto,則自動選擇標(biāo)簽的標(biāo)注間距斥废,將標(biāo)簽名不重疊的部分(或全部)輸出

mask:控制某個矩陣塊是否顯示出來椒楣。默認(rèn)值是None。如果是布爾型的DataFrame牡肉,則將DataFrame里True的位置用白色覆蓋掉

ax:設(shè)置作圖的坐標(biāo)軸捧灰,一般畫多個子圖時需要修改不同的子圖的該值

**kwargs:All other keyword arguments are passed to ax.pcolormesh

首先造一個數(shù)據(jù)表:

import seaborn as sns

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

% matplotlib inline

region = ['Azerbaijan','Bahamas', 'Bangladesh', 'Belize', 'Bhutan',

? ? ? ? ? 'Cambodia', 'Cameroon', 'Cape Verde', 'Chile', 'China']? #10個

kind = ['Afforestation & reforestation', 'Biofuels', 'Biogas', 'Biomass', 'Cement']? #5個

np.random.seed(20180316)

arr_region = np.random.choice(region, size=(200,))

list_region = list(arr_region)

arr_kind = np.random.choice(kind, size=(200,))

list_kind = list(arr_kind)

values = np.random.randint(100, 200, 200)

list_values = list(values)

df = pd.DataFrame({'region':list_region,'kind': list_kind,'values':list_values})


df['kind'].value_counts()

將DataFrame數(shù)據(jù)表轉(zhuǎn)化成“數(shù)據(jù)透視表”

import pandas as pd

pt = df.pivot_table(index='kind', columns='region', values='values', aggfunc=np.sum)? #數(shù)據(jù)透視表

pt? #index是行,columns是列统锤,values是表中展示的數(shù)據(jù)毛俏,aggfunc是表中展示每組數(shù)據(jù)使用的運算

熱力圖矩陣塊顏色參數(shù)

#cmap(顏色)

import matplotlib.pyplot as plt

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

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名稱

ax2.set_title('matplotlib colormap')

ax2.set_xlabel('region')

ax2.set_ylabel('kind')

#center的用法(顏色)

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ù)的均值時,生成的圖片顏色要向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')

#robust的用法(顏色)

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, robust=False )

ax1.set_title('robust=False')

ax1.set_xlabel('')

ax1.set_xticklabels([]) #設(shè)置x軸圖例為空值

ax1.set_ylabel('kind')

sns.heatmap(pt, linewidths = 0.05, ax = ax2, cmap=cmap, center=None, robust=True )

ax2.set_title('robust=True')

ax2.set_xlabel('region')

ax2.set_ylabel('kind')

熱力圖矩陣塊注釋參數(shù)

#annot(矩陣上數(shù)字),annot_kws(矩陣上數(shù)字的大小顏色字體)matplotlib包text類下的字體設(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'})

# Keyword arguments for ax.text when annot is True.? http://stackoverflow.com/questions/35024475/seaborn-heatmap-key-words


#fmt(字符串格式代碼饲窿,矩陣上標(biāo)識數(shù)字的數(shù)據(jù)格式煌寇,比如保留小數(shù)點后幾位數(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對某些矩陣塊的顯示進行覆蓋

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對pt進行布爾型轉(zhuǎn)化,結(jié)果為True的位置用白色覆蓋

ax2.set_title('mask: boolean DataFrame')

ax2.set_xlabel('region')

ax2.set_ylabel('kind')


用mask實現(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ū)域覆蓋掉

修改顏色條標(biāo)簽大小

cax = plt.gcf().axes[-1]

cax.tick_params(labelsize=20)

修改軸標(biāo)簽大小

ax1.tick_params(labelsize=16)


作者:Young_618

來源:CSDN

原文:https://blog.csdn.net/cymy001/article/details/79576019

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末免绿,一起剝皮案震驚了整個濱河市唧席,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖淌哟,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迹卢,死亡現(xiàn)場離奇詭異,居然都是意外死亡徒仓,警方通過查閱死者的電腦和手機腐碱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掉弛,“玉大人症见,你說我怎么就攤上這事⊙甓觯” “怎么了谋作?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乎芳。 經(jīng)常有香客問我遵蚜,道長,這世上最難降的妖魔是什么奈惑? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任吭净,我火速辦了婚禮,結(jié)果婚禮上肴甸,老公的妹妹穿的比我還像新娘寂殉。我一直安慰自己,他們只是感情好原在,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布友扰。 她就那樣靜靜地躺著,像睡著了一般晤斩。 火紅的嫁衣襯著肌膚如雪焕檬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天澳泵,我揣著相機與錄音实愚,去河邊找鬼。 笑死兔辅,一個胖子當(dāng)著我的面吹牛腊敲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播维苔,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼碰辅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了介时?” 一聲冷哼從身側(cè)響起没宾,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤凌彬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后循衰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铲敛,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年会钝,在試婚紗的時候發(fā)現(xiàn)自己被綠了伐蒋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡迁酸,死狀恐怖先鱼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奸鬓,我是刑警寧澤焙畔,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站全蝶,受9級特大地震影響闹蒜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抑淫,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姥闪。 院中可真熱鬧始苇,春花似錦、人聲如沸筐喳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽避归。三九已至荣月,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梳毙,已是汗流浹背哺窄。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留账锹,地道東北人萌业。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像奸柬,于是被迫代替她去往敵國和親生年。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容