一、sns.heatmap參數
sns.heatmap是一個數據可視化函數,用于繪制矩陣數據的熱圖。它有很多參數可以用于調整圖形樣式和呈現方式。這里介紹幾個常用的參數:
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 10))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
1. data: 需要展示的數據,可以是DataFrame或numpy數組
2. cmap: 顏色映射表,設置熱圖的顏色主題。它可以是內置顏色映射表(如'coolwarm'、'viridis'、'mako'、'rocket'、'copper'等),也可以是自定義的顏色列表
3. annot: 是否顯示每個單元格的數值
4. fmt: 數值格式,用于控制annot參數輸出數值的格式
5. linewidths: 熱圖中每個矩形之間的間隔線寬度
二、sns.heatmap合并顏色帶
熱圖中的顏色帶用于表示數據值的大小,不同的顏色帶代表不同的數據范圍。有時候,可能需要將兩個熱圖的顏色帶合并為一個顏色帶,以便進行比較。sns.heatmap提供了vmin和vmax參數,用于將不同數據范圍內的顏色值映射到相同的顏色帶上。
df1 = pd.DataFrame(np.random.randn(10, 10))
df2 = pd.DataFrame(np.random.randn(10, 10))
plt.figure(figsize=(8, 6))
plt.subplot(1, 2, 1)
sns.heatmap(df1, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(1, 2, 2)
sns.heatmap(df2, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, vmin=-1, vmax=1)
plt.show()
2個熱圖顏色帶合并之前:
2個熱圖顏色帶合并之后:
三、sns.heatmap函數
sns.heatmap函數可以接收一些關鍵字參數,用于控制熱圖的外觀和響應式。例如,我們可以使用xticklabels和yticklabels參數來更改X和Y軸上的標簽。
df = pd.DataFrame(np.random.randn(10, 10), columns=[f'col{i}' for i in range(10)],
index=[f'row{i}' for i in range(10)])
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, xticklabels=[f'col{i}' for i in range(10)],
yticklabels=[f'row{i}' for i in range(10)])
plt.show()
熱圖外觀控制示例圖:
四、sns.heatmap作用
sns.heatmap函數主要用于可視化矩陣數據的熱圖,用不同的顏色表示數據的大小,顏色越亮則表示數據越大,顏色越暗則表示數據越小。
例如,設置顏色映射表為'coolwarm',則大于0的數值顯示為紅色,小于0的數值顯示為藍色,0的數值顯示為中間的白色。
df = pd.DataFrame(np.random.randn(10, 10))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
plt.show()
熱圖應用示例圖:
五、sns.heatmap字體大小
sns.heatmap函數可以設置字體的大小,通過修改字體的大小,我們可以讓熱圖更加美觀,易于閱讀。
df = pd.DataFrame(np.random.randn(10, 10))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, annot_kws={'size': 12})
plt.show()
熱圖字體大小示例圖:
六、sns.heatmap中文列名
sns.heatmap函數默認使用英文字母作為列名,但是有時候我們需要使用中文作為列名,這時候需要更改列名并設置xticklabels參數。
df = pd.DataFrame(np.random.randn(10, 10), columns=[f'列{i}' for i in range(10)])
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5,
xticklabels=df.columns, yticklabels=[f'行{i}' for i in range(10)],)
plt.show()
熱圖中文列名示例圖:
七、sns.heatmap中文標題
sns.heatmap函數可以設置熱圖的標題,根據熱圖的應用場景,設置對應的標題顯得更為嚴謹。
df = pd.DataFrame(np.random.randn(10, 10), columns=[f'col{i}' for i in range(10)],
index=[f'row{i}' for i in range(10)])
plt.figure(figsize=(8, 6))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, xticklabels=[f'col{i}' for i in range(10)],
yticklabels=[f'row{i}' for i in range(10)])
plt.title('熱圖示例', fontsize=16)
plt.show()
熱圖中文標題示例圖:
八、sns.heatmap共用顏色條
如果在同一畫布上繪制多個熱圖,可能需要共用相同的顏色條。sns.heatmap函數提供了cbar參數來實現。
df1 = pd.DataFrame(np.random.randn(10, 10))
df2 = pd.DataFrame(np.random.randn(10, 10))
plt.figure(figsize=(8, 6))
plt.subplot(1, 2, 1)
sns.heatmap(df1, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(1, 2, 2)
sns.heatmap(df2, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, cbar=False)
plt.subplots_adjust(wspace=0.5)
plt.show()
多個熱圖共用顏色條示例圖:
九、sns.heatmap標記目標值
我們可以使用mask參數來標記矩陣的某些區域。例如,標記所有小于0的值為紅色,大于等于0的值為綠色。
df = pd.DataFrame(np.random.randn(10, 10))
mask = np.zeros_like(df)
mask[df < 0] = True
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, mask=mask)
plt.show()
熱圖標記目標值示例圖:
十、sns.heatmap cmap選取
cmap是sns.heatmap函數中的一個參數,用于指定顏色映射表。不同的顏色映射表可以反映不同的數據特征,選擇合適的顏色映射表非常重要。matplotlib提供了一些內置的顏色映射表,包括'viridis'、'plasma'、'inferno'、'magma'等,可以根據數據特點來選取合適的顏色映射表。
df = pd.DataFrame(np.random.randn(10, 10))
plt.figure(figsize=(8, 6))
plt.subplot(2, 2, 1)
sns.heatmap(df, cmap='viridis', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(2, 2, 2)
sns.heatmap(df, cmap='plasma', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(2, 2, 3)
sns.heatmap(df, cmap='inferno', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(2, 2, 4)
sns.heatmap(df, cmap='magma', annot=True, fmt='.2f', linewidths=.5)
plt.subplots_adjust(wspace=0.5, hspace=0.5)
plt.show()
不同顏色映射表的示例圖: