![](https://news.xinpengboligang.com/upload/keji/915a47b6728d5bd66214506ccd6d0ebe.jpeg)
在先前的兩期內容:1)揭秘數據背後的關系:相關性分析一鍵了解!2)SCI繪圖-最全面的相關性繪圖方法整理!分別介紹了如何進行相關性分析和如何使用R語言繪制相關性圖,本期分享的內容是使用python繪制相關性圖,滿足一下“雪碧不要加冰”這位同學的需求!
![](https://news.xinpengboligang.com/upload/keji/ddcc2acd75c336e9bfcb847567ecb19f.jpeg)
so, 如果你也有感興趣的問題,歡迎私信留言!如果可以的話,點贊、在看、分享三連走一波~
![](https://news.xinpengboligang.com/upload/keji/4959b4a5a24966869934b9cefd4030f6.jpeg)
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)
![](https://news.xinpengboligang.com/upload/keji/6022f781688394aeadbd1e3832a7a8b9.jpeg)
將圖形的主題設置為 "ticks"風格, Seaborn 提供了不同的圖形主題,ticks"風格通常具有一些較細的刻度線和軸標簽,使得圖形看起來更加清晰。其他一些常見的 Seaborn 主題包括 "darkgrid"、"whitegrid"、"dark"、"white" 等。
# 設置主題
sns.set_theme(style="ticks")
使用 Seaborn 庫的 pairplot 函數繪制一個數據集的成對關系圖,用於觀察多個變量之間的關系,特別是在數據集包含多個數值型變量時。其中hue參數指定要映射到不同的顏色的變量。
# 繪圖
sns.pairplot(df, hue="species")
plt.show()
![](https://news.xinpengboligang.com/upload/keji/24dc172d05b3dfeb4f7d9a62f1ac71f1.jpeg)
3.繪制Heatmap
使用的數據集為mtcars, 和R繪相關性圖那期數據保持一致,為了偷懶直接讀取pydataset包中的mtcars數據集。
from pydataset import data
# 加載 mtcars 數據集
mtcars = data('mtcars')
# 顯示數據集的前幾行
print(mtcars.head())
![](https://news.xinpengboligang.com/upload/keji/90fdcf57aba59982f7303cc720bb3850.jpeg)
使用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()
![](https://news.xinpengboligang.com/upload/keji/57613a53e97f362346d321cfdf250220.jpeg)
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()
![](https://news.xinpengboligang.com/upload/keji/3e4ede1e07cc459abb09ec499b51d333.jpeg)
顏色不好看哈,調色使用cmap參數,可以使用的cmap參考matplotlib官方文檔https://matplotlib.org/stable/users/explain/colors/colormaps.html!
5. 繪制散點熱圖
使用mtcars的相關矩陣,轉為長格式:
![](https://news.xinpengboligang.com/upload/keji/567a961bd6ca20a3d4155f9444d5bb2d.jpeg)
使用函數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()
![](https://news.xinpengboligang.com/upload/keji/8099fcf25d2cd81db871cacf0a8e291c.jpeg)
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()
![](https://news.xinpengboligang.com/upload/keji/a614f20a74fb5759950bd1f3062b69cc.jpeg)