matplotlib 标签_Python可视化matplotlibamp;seborn14热图heatmap
"pythonic生物人"的第53篇分享。
熱力圖(heatmap)可通過顏色深淺變化,優(yōu)雅的展示數(shù)據(jù)的差異;本篇詳細(xì)介紹python seaborn繪制熱圖(手把手講解)。本文您將學(xué)到什么?
1、matplotlib繪制熱圖
2、seaborn繪制熱圖?
2.0 數(shù)據(jù)集準(zhǔn)備
2.1 seaborn繪制heatmap?2.1.1 seaborn默認(rèn)參數(shù)繪制hetmap2.1.2 colorbar(圖例)范圍修改:vmin、vmax2.1.3 修改熱圖顏色盤(colormap):cmp使用matplotlib中colormap
使用Seaborn顏色盤?
使用palettable庫中顏色盤?
3、seaborn.heatmap所有參數(shù)詳解代碼
正文開始啦
1、matplotlib繪制熱圖
matplotlib可通過以下兩種方法繪制heamap;
- matplotlib.axes.Axes.imshow
- matplotlib.pyplot.imshow
原始效果圖,挺丑陋的;改進(jìn)后效果圖(雖然要寫很多輔助函數(shù)實(shí)現(xiàn),但是可以很好的實(shí)現(xiàn)自定義熱圖,需要高度個(gè)性化的小伙伴可以去摸索);?
2、seaborn繪制熱圖
seaborn在matplotlib的基礎(chǔ)上封裝了個(gè)seaborn.heatmap,非常傻瓜式操作,我等調(diào)包俠的福音,效果可以趕得上R語言了,不逼逼,下面上干貨:
2.0 數(shù)據(jù)集準(zhǔn)備
使用鳶尾花iris數(shù)據(jù)集,數(shù)據(jù)集詳細(xì)介紹請戳:鳶尾花iris數(shù)據(jù)集;
import?matplotlib.pyplot?as?pltimport?numpy?as?npimport?pandas?as?pdfrom?pandas?import?Series,DataFrameimport?seaborn?as?snsimport?palettable#python顏色庫from?sklearn?import?datasets?plt.rcParams['font.sans-serif']=['SimHei']??#?用于顯示中文
plt.rcParams['axes.unicode_minus']?=?False??#?用于顯示中文
iris=datasets.load_iris()
x,?y?=?iris.data,?iris.target
pd_iris?=?pd.DataFrame(np.hstack((x,?y.reshape(150,?1))),columns=['sepal?length(cm)','sepal?width(cm)','petal?length(cm)','petal?width(cm)','class']?)
plt.figure(dpi=200,?figsize=(10,6))
data1?=?np.array(pd_iris['sepal?length(cm)']).reshape(25,6)#Series轉(zhuǎn)np.array
df?=?pd.DataFrame(data1,?
??????????????????index=[chr(i)?for?i?in?range(65,?90)],#DataFrame的行標(biāo)簽設(shè)置為大寫字母
??????????????????columns=["a","b","c","d","e","f"])#設(shè)置DataFrame的列標(biāo)簽
用來繪制熱圖的數(shù)據(jù)集是什么樣子的?其實(shí)就是取iris中的一列(150個(gè)值),轉(zhuǎn)化為一個(gè)25x6的DataFrame數(shù)據(jù)集,如下:
print(df.shape)df.head()
2.1 seaborn繪制heatmap
語法:seaborn.heatmap
2.1.1 seaborn默認(rèn)參數(shù)繪制hetmap
plt.figure(dpi=120)sns.heatmap(data=df,#矩陣數(shù)據(jù)集,數(shù)據(jù)的index和columns分別為heatmap的y軸方向和x軸方向標(biāo)簽???????????????
?????????)
plt.title('所有參數(shù)默認(rèn)')
2.1.2 colorbar(圖例)范圍修改:vmin、vmax
#右側(cè)colorbar范圍修改#注意colorbar范圍變化,左圖顏色隨之變化plt.clf()
plt.figure(dpi=120)
sns.heatmap(data=df,#矩陣數(shù)據(jù)集,數(shù)據(jù)的index和columns分別為heatmap的y軸方向和x軸方向標(biāo)簽
?????????????????vmin=5,#圖例(右側(cè)顏色條color?bar)中最小顯示值?
?????????????????vmax=8,#圖例(右側(cè)顏色條color?bar)中最大顯示值
???????????)
plt.title('右側(cè)colorbar顯示范圍修改:vmin、vmax')?
2.1.3 修改熱圖顏色盤(colormap):cmp
感覺默認(rèn)顏色太丑陋,可以換個(gè)顏色盤,cmp參數(shù)控制hetmap顏色;
可以使用matplotlib顏色盤、seaborn顏色盤、palettable庫中顏色盤
使用matplotlib中colormap
了解matplotlib中所有colormap請戳:matplotlib中colormap使用詳解
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=plt.get_cmap('Set3'),#使用matplotlib中的顏色盤
???????????)
plt.title("使用matplotlib中的顏色盤:cmap=plt.get_cmap('Set3')")#?感覺顏色還是丑,那就再換個(gè)
plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=plt.get_cmap('tab20c'),#matplotlib中的顏色盤'tab20c'
???????????)
plt.title("使用matplotlib中的顏色盤:cmap=plt.get_cmap('tab20c')")#感覺太油膩,太花哨,那就來個(gè)純一點(diǎn)的(色度依次增加,請看右邊圖例顏色變化)
plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=plt.get_cmap('Greens'),#matplotlib中的顏色盤'Greens'
???????????)
plt.title("使用matplotlib中的顏色盤:cmap=plt.get_cmap('Greens')")#色度依次遞減,注意比較右邊圖例顏色變化
plt.figure(dpi=120)
sns.heatmap(data=df,?????????????????#cmap選取的顏色條,有的是由淺到深('Greens'),有的是相反的('Greens_r')
????????????cmap=plt.get_cmap('Greens_r'),#matplotlib中的顏色盤'Greens_r'
???????????)
plt.title("使用matplotlib中的顏色盤:cmap=plt.get_cmap('Greens_r')")
使用Seaborn顏色盤
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=sns.dark_palette("#2ecc71",?as_cmap=True),#seaborn 深色色盤:sns.dark_palette使用
???????????)
plt.title("使用seaborn dark顏色盤:cmap=sns.dark_palette('#2ecc71', as_cmap=True)")plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=sns.light_palette("#2ecc71",?as_cmap=True),#淡色色盤:sns.light_palette()使用
???????????)
plt.title("使用seaborn light顏色盤:sns.light_palette('#2ecc71', as_cmap=True)")plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=sns.diverging_palette(10,?220,?sep=80,?n=7),#區(qū)分度顯著色盤:sns.diverging_palette()使用
???????????)
plt.title("使用seaborn diverging顏色盤:sns.diverging_palette(10, 220, sep=80, n=7)")plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=sns.cubehelix_palette(as_cmap=True),#漸變色盤:sns.cubehelix_palette()使用
???????????)
plt.title("使用seaborn cubehelix顏色盤:sns.diverging_palette(220, 20, sep=20, as_cmap=True)")
使用palettable庫中顏色盤
關(guān)于python palettable庫使用請戳:python Palettable庫使用詳解
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,#使用palettable庫中顏色條
???????????)
plt.title("使用palettable庫顏色盤:palettable.cartocolors.diverging.ArmyRose_7.mpl_colors")plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=palettable.cmocean.diverging.Curl_10.mpl_colors,#使用palettable庫中顏色條
???????????)
plt.title("使用palettable庫顏色盤:palettable.cmocean.diverging.Curl_10.mpl_colors")plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=palettable.tableau.TrafficLight_9.mpl_colors,#使用palettable庫中顏色條
???????????)
plt.title("使用palettable庫顏色盤:palettable.tableau.TrafficLight_9.mpl_colors")
2.1.4 修改圖例中心數(shù)據(jù)值大小:center
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????center=7,#color?bar的中心數(shù)據(jù)值大小,可以控制整個(gè)熱圖的顏盤深淺
???????????)
plt.title("color bar的中心數(shù)據(jù)值大小:center")
2.1.5 熱圖中文本開關(guān):annot
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????annot=True,#默認(rèn)為False,當(dāng)為True時(shí),在每個(gè)格子寫入data中數(shù)據(jù)
???????????)
plt.title("每個(gè)格子寫入data中數(shù)據(jù):annot=True")
2.1.6 格子中數(shù)據(jù)的格式化輸出:fmt
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????annot=True,#默認(rèn)為False,當(dāng)為True時(shí),在每個(gè)格子寫入data中數(shù)據(jù)
????????????fmt=".2f",#設(shè)置每個(gè)格子中數(shù)據(jù)的格式,參考之前的文章,此處保留兩位小數(shù)
???????????)
plt.title("格子中數(shù)據(jù)的格式化輸出:fmt")
2.1.7 格子中數(shù)據(jù)(字體大小、磅值、顏色)等設(shè)置:annot_kws
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????annot=True,#默認(rèn)為False,當(dāng)為True時(shí),在每個(gè)格子寫入data中數(shù)據(jù)
????????????annot_kws={'size':8,'weight':'normal',?'color':'blue'},#設(shè)置格子中數(shù)據(jù)的大小、粗細(xì)、顏色
???????????)
plt.title("格子中數(shù)據(jù)(字體大小、磅值、顏色)等設(shè)置:annot_kws")
2.1.8 格子外框?qū)挾取㈩伾O(shè)置:linewidths、linecolor
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????linewidths=1,#每個(gè)格子邊框?qū)挾?#xff0c;默認(rèn)為0
????????????linecolor='red',#每個(gè)格子邊框顏色,默認(rèn)為白色
???????????)
plt.title("格子外框?qū)挾取㈩伾O(shè)置:linewidths、linecolor")
2.1.9 圖例開關(guān):cbar
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????cbar=False,#右側(cè)圖例(color?bar)開關(guān),默認(rèn)為True顯示
???????????)
plt.title("圖例開關(guān):cbar")
2.1.10?圖例位置、名稱、標(biāo)簽等設(shè)置:cbar_kws
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????cbar=True,
????????????cbar_kws={'label':?'ColorbarName',?#color?bar的名稱'orientation':?'horizontal',#color?bar的方向設(shè)置,默認(rèn)為'vertical',可水平顯示'horizontal'"ticks":np.arange(4.5,8,0.5),#color?bar中刻度值范圍和間隔"format":"%.3f",#格式化輸出color?bar中刻度值"pad":0.15,#color?bar與熱圖之間距離,距離變大熱圖會(huì)被壓縮
???????????????????????????????????????????????????},
???????????)
plt.title("圖例位置、名稱、標(biāo)簽等設(shè)置:cbar_kws")
2.1.11 熱圖中只顯示部分符合條件的數(shù)據(jù):mask
plt.figure(dpi=120)sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????mask=df<6.0,#熱圖中顯示部分?jǐn)?shù)據(jù):顯示數(shù)值小于6的數(shù)據(jù)?
?????????)
plt.title("熱圖中只顯示部分符合條件的數(shù)據(jù):mask")
2.1.12 自定義x軸、y軸標(biāo)簽:xticklabels、yticklabels
#?linewidths、linecolor參數(shù)plt.figure(dpi=120)
sns.heatmap(data=df,
????????????cmap=palettable.cartocolors.diverging.ArmyRose_7.mpl_colors,
????????????xticklabels=['三連啊','關(guān)注公眾號啊','pythonic生物人','收藏啊','點(diǎn)贊啊','老鐵三連三連']?,?#x軸方向刻度標(biāo)簽開關(guān)、賦值,可選“auto”,?bool,?list-like(傳入列表),?or?int,
????????????yticklabels=True,?#y軸方向刻度標(biāo)簽開關(guān)、同x軸
?????????)
plt.title("自定義x軸、y軸標(biāo)簽:xticklabels、yticklabels")#['sepal?length(cm)','sepal?width(cm)','petal?length(cm)','petal?width(cm)','class']?
3、seaborn.heatmap所有參數(shù)詳解代碼
感興趣的小火伴,可以關(guān)注我的公眾號免費(fèi)獲取源代碼:
4、參考資料
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.imshow.html#matplotlib.pyplot.imshow
http://seaborn.pydata.org/generated/seaborn.heatmap.html?highlight=heatmap#seaborn.heatmap
本篇結(jié)束,下一篇詳細(xì)介紹聚類熱圖,感興趣小伙伴歡迎跟蹤我。
同系列文章Python可視化|matplotlib12-垂直|水平|堆積條形圖詳解Python可視化|matplotlib13-直方圖(histogram)詳解Python可視化|08-Palettable庫中顏色條Colormap(四)Python可視化|matplotlib07-自帶顏色條Colormap(三)
原創(chuàng)不易"點(diǎn)贊"、"在看"鼓勵(lì)下唄!
總結(jié)
以上是生活随笔為你收集整理的matplotlib 标签_Python可视化matplotlibamp;seborn14热图heatmap的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn逻辑回归 极大似然 损失_
- 下一篇: python中用来占位_python 占