SCI繪圖-相關性繪圖2.0(python版)

2024年2月6日 25点热度 0人点赞

在先前的兩期內容:1)揭秘數據背後的關系:相關性分析一鍵了解!2)SCI繪圖-最全面的相關性繪圖方法整理!分別介紹了如何進行相關性分析和如何使用R語言繪制相關性圖,本期分享的內容是使用python繪制相關性圖,滿足一下“雪碧不要加冰”這位同學的需求!

so, 如果你也有感興趣的問題,歡迎私信留言!如果可以的話,點贊、在看、分享三連走一波~

python繪圖使用最廣泛的庫是matplotlib,以及在其基礎上開發的一些擴展包,相比於R的ggplot2發展的時間比較短,雖然我也是python的狂熱愛好者, 但還是推薦使用R來繪圖,更加容易而且美觀。

1. 包安裝

安裝 matplotlib seaborn pydataset pandas numpy

pip install matplotlib seaborn pydataset numpy pandas
# 導包
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from pydataset import data

2. 繪制散點矩陣

使用的數據集是經典的鳶尾花數據集,season中自帶,直接讀取。

# load dataset
df = sns.load_dataset("iris")
print(df)

將圖形的主題設置為 "ticks"風格, Seaborn 提供了不同的圖形主題,ticks"風格通常具有一些較細的刻度線和軸標簽,使得圖形看起來更加清晰。其他一些常見的 Seaborn 主題包括 "darkgrid"、"whitegrid"、"dark"、"white" 等。

# 設置主題
sns.set_theme(style="ticks")

使用 Seaborn 庫的 pairplot 函數繪制一個數據集的成對關系圖,用於觀察多個變量之間的關系,特別是在數據集包含多個數值型變量時。其中hue參數指定要映射到不同的顏色的變量。

# 繪圖
sns.pairplot(df, hue="species")
plt.show()

3.繪制Heatmap

使用的數據集為mtcars, 和R繪相關性圖那期數據保持一致,為了偷懶直接讀取pydataset包中的mtcars數據集。

from pydataset import data
# 加載 mtcars 數據集
mtcars = data('mtcars')
# 顯示數據集的前幾行
print(mtcars.head())

使用pandas數據矩陣的cor方法計算相關性矩陣,關於如何求相關性矩陣?相關性計算原理 -> 見這期內容: 揭秘數據背後的關系:相關性分析一鍵了解!

corr = mtcars.corr()

繪帶數字註釋的熱圖

fig, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(corr, annot=True, fmt=".2g", linewidths=.5, ax=ax)
plt.show()

4.繪制對角相關矩陣Heatmap

其實對角矩陣熱圖就是蓋住了上三角,代碼如下:

sns.set_theme(style="white")
# 生成上三角的蒙版
# 可以試著寫下生成下三角的蒙版的代碼?自己試下哦~
mask = np.triu(np.ones_like(corr, dtype=bool))
# 繪圖
sns.heatmap(corr, mask=mask, cmap='hot', vmax=.3, center=0,
            square=True, linewidths=.5, cbar_kws={"shrink": 1}) 
plt.show()

顏色不好看哈,調色使用cmap參數,可以使用的cmap參考matplotlib官方文檔https://matplotlib.org/stable/users/explain/colors/colormaps.html

5. 繪制散點熱圖

使用mtcars的相關矩陣,轉為長格式:

使用函數relplot繪圖

# 設置主題
sns.set_theme(style="whitegrid")
# 將相關矩陣轉為long
corr = mtcars.corr().stack().reset_index(name="correlation")
# 繪圖
g = sns.relplot(
    data=corr,
    x="level_0", y="level_1", hue="correlation", size="correlation",
    palette="vlag", hue_norm=(-1, 1), edgecolor=".7",
    height=5, sizes=(50, 250), size_norm=(-1, 1),
)
g.set(xlabel="", ylabel="", aspect="equal")
g.despine(left=True, bottom=True)
for label in g.ax.get_xticklabels():
    label.set_rotation(90)
plt.show()

6.繪制相關性聚類熱圖

使用 Seaborn 庫的 clustermap 函數繪制相關聚類熱圖

# 為每一個特征映射一個顏色
feature_names = list(corr.columns)
network_pal = sns.husl_palette(11, s=.6)
network_lut = dict(zip(feature_names, network_pal))
network_colors = pd.Series(feature_names, index=feature_names).map(network_lut)
# 繪圖
g = sns.clustermap(corr, center=0, cmap="vlag",
                   row_colors=network_colors, col_colors=network_colors,
                   dendrogram_ratio=(.1, .2),
                   cbar_pos=(.02, .32, .03, .2),
                   linewidths=.75
                   )
# 去除行 即左側的聚類樹
g.ax_row_dendrogram.remove()
plt.show()