?熱力圖(Heatmap)是一種通過顏色深淺來展示數據分布、密度和強度等信息的可視化圖表。它通過對色塊著色來反映數據特征,使用戶能夠直觀地理解數據模式,發現規律,并作出決策。
目錄
基本原理
sns.heatmap
代碼實現
基本原理
熱力圖本質上是一個數值矩陣,圖上每一個色塊都代表一個數值。通過離散數值、權重算法與分析模型等技術手段,將用戶行為頻度或數據密度以色塊的形式展現出來。在設計時,需要指定顏色映射的規則,例如較大的值可以由較深的顏色或偏暖的顏色表示,而較小的值則由較淺的顏色或較冷的顏色表示。
兩個變量之間相關系數的計算公式為:
ρ表示相關系數,Cov表示協方差,E表示數學期望/均值。值得注意的是,該相關系數主要用以量化變量之間的線性關聯強度;具體而言,當相關系數較高時,它指示了變量間存在較強的線性相關性。然而,對于相關系數較低的兩個變量而言,這僅僅表明它們之間的線性相關程度較弱,而并非意味著這兩個變量之間完全不存在其他類型的關聯,如非線性(如曲線)關系或其他復雜的相關性。因此,在解釋相關系數時需謹慎,避免過度簡化或誤讀變量間的關系。
sns.heatmap
sns.heatmap 是 Seaborn 庫中的一個非常有用的函數,用于繪制熱力圖(Heatmap)。熱力圖是一種通過顏色深淺來表示數據大小的圖形,常用于展示矩陣或表格數據的分布和關系。在數據可視化中,熱力圖尤其適合展示變量之間的相關性、數據的聚類情況或數據的密度分布等。
sns.heatmap涉及到一些主要的參數:
- vmin, vmax:這兩個參數用于設置熱力圖中顏色映射的最小值和最大值,可以調整顏色映射的范圍以更好地展示數據。
- cmap:指定顏色映射表(colormap),用于控制熱力圖中顏色的分布和變化。
- annot:如果設置為True,則在每個單元格中顯示數據值。也可以是一個形狀與數據相同的數組,用于自定義注釋內容。
- fmt:當annot為True時,用于設置注釋的格式化字符串。
- linewidths:設置熱力圖單元格之間的線條寬度。
- linecolor:設置熱力圖單元格之間線條的顏色。
- cbar:是否顯示顏色條。
- square:如果為True,則強制熱力圖的每個單元格都是正方形的。
- mask:一個布爾數組或DataFrame,用于指定哪些單元格應該被屏蔽(不顯示)。這對于繪制下三角或上三角矩陣特別有用。
代碼實現
# 生成一個3x3的隨機數組
values = np.random.rand(3, 3)
# 設置x軸標簽
x_ticks = ['x-1', 'x-2', 'x-3']
# 設置y軸標簽
y_ticks = ['y-1', 'y-2', 'y-3']
# 使用seaborn庫繪制熱圖,并設置x軸和y軸標簽
ax = sns.heatmap(values, xticklabels=x_ticks, yticklabels=y_ticks)
# 設置圖表標題
ax.set_title('3x3 Heatmap')
# 設置x軸標簽
ax.set_xlabel('x label')
# 設置y軸標簽
ax.set_ylabel('y label')
# 顯示圖表
plt.show()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
通過annot參數設置可以在小方格中顯示數值
# 生成一個10行12列的隨機數矩陣
uniform_data = np.random.rand(10, 12)
# 使用seaborn庫中的heatmap函數繪制熱力圖,annot參數設置為True表示在熱力圖上顯示數據值
ax = sns.heatmap(uniform_data, annot=True)
可以創建一個與相關系數矩陣相同大小的布爾矩陣,用于遮罩,實現更加簡化美觀的效果。
布爾矩陣(Boolean Matrix)是數學中的一個重要概念,它指的是元素只取0或1的矩陣,因此也被稱為0-1矩陣。布爾矩陣在計算機科學、編碼理論、網絡理論等領域有著廣泛的應用。在數學上,布爾矩陣通常使用大寫字母(如A, B, C等)表示,矩陣中的元素使用小寫字母加下標(如a_ij)表示,其中i表示行號,j表示列號。
# 導入ascii_letters模塊
from string import ascii_letters
# 設置seaborn的樣式為white
sns.set(style="white")
# 創建一個隨機數生成器
rs = np.random.RandomState(33)
# 創建一個100行26列的DataFrame,數據為正態分布隨機數
d = pd.DataFrame(data=rs.normal(size=(100, 26)),columns=list(ascii_letters[26:]))
# 計算DataFrame的相關系數矩陣
corr = d.corr()
# 創建一個與相關系數矩陣相同大小的布爾矩陣,用于遮罩
mask = np.zeros_like(corr, dtype=bool)
# 將上三角矩陣的元素設置為True
mask[np.triu_indices_from(mask)] = True
# 創建一個11x9的子圖
f, ax = plt.subplots(figsize=(11, 9))
# 創建一個顏色映射
cmap = sns.diverging_palette(220, 10, as_cmap=True)
# 繪制熱力圖,使用遮罩,顏色映射,最大值為0.3,中心值為0,方格,邊框寬度為0.5,顏色條縮小為0.5
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,square=True, linewidths=.5, cbar_kws={"shrink": .5})