如何用 Python 繪制熱力圖

繪制熱力圖在數據可視化中是非常常見且有用的方法,尤其在對二維數據進行分析的時候,熱力圖可以幫助直觀地看到不同區(qū)域數據的差異。接下來,我們一步一步拆解如何使用 Python 來繪制熱力圖,并逐步講解各個實現步驟,讓你能夠完整掌握整個過程。

什么是熱力圖?

熱力圖是一種用顏色來表現數據強度的圖形。不同的顏色代表數值的大小或頻率的高低,通常用于分析二維數據的分布情況。例如,可以用熱力圖來查看城市不同區(qū)域的溫度分布、銷售密集程度等。通過不同顏色的對比,熱力圖使得觀察者可以快速識別數據的趨勢和模式。


在 Python 中,有幾個常用的庫可以用來繪制熱力圖,包括 Matplotlib、SeabornPandas。接下來我們將主要使用 Seaborn 這個庫,因為它提供了一些封裝好的函數,可以讓繪制熱力圖變得更加簡便。

環(huán)境配置和依賴安裝

要開始繪制熱力圖,我們首先需要確保安裝了以下依賴庫:

  • Matplotlib
  • Seaborn
  • NumPy
  • Pandas

可以通過以下命令安裝這些庫:

pip install matplotlib seaborn numpy pandas

導入必要的庫

在代碼中,我們需要導入這些庫。Matplotlib 用于底層繪圖,Seaborn 提供了更高級別的可視化接口,而 NumPyPandas 則用來處理數據。

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

生成示例數據

在進行熱力圖繪制之前,我們需要一些數據來進行可視化。我們可以使用 NumPy 來生成一組隨機的二維數據,或者使用 Pandas 來創(chuàng)建一個具有行和列標簽的二維表格。

# 生成 10x10 的隨機數據
data = np.random.rand(10, 10)

# 將 NumPy 數據轉換為 Pandas DataFrame,并給行和列指定標簽
data_frame = pd.DataFrame(data, 
                          index=[f'Row{i}' for i in range(1, 11)], 
                          columns=[f'Col{i}' for i in range(1, 11)])

在上面的代碼中,我們創(chuàng)建了一個大小為 10x10 的隨機數矩陣,并將其轉換為 DataFrame 形式,以便我們能夠更好地控制熱力圖的行和列標簽。

繪制基礎熱力圖

使用 Seaborn 繪制熱力圖非常簡單,sns.heatmap() 是 Seaborn 中繪制熱力圖的核心函數。讓我們來繪制一個基礎的熱力圖。

# 繪制基礎熱力圖
plt.figure(figsize=(10, 8))
sns.heatmap(data_frame)

# 顯示熱力圖
plt.title("Basic Heatmap Example")
plt.show()

在這段代碼中,我們調用了 sns.heatmap() 函數并將生成的數據幀 data_frame 作為參數傳遞給它。此外,還通過 plt.title() 給圖形添加標題。plt.show() 用于顯示圖形。

熱力圖的自定義與優(yōu)化

基礎熱力圖雖然簡單易懂,但是通過一些自定義設置,我們可以讓圖形看起來更加美觀并且更易于分析。

添加顏色條與自定義顏色

默認情況下,熱力圖會自動使用一個顏色條(color bar)來指示數值范圍。我們可以通過 cmap 參數來自定義顏色映射,例如使用 'coolwarm''viridis' 顏色主題。

plt.figure(figsize=(10, 8))
sns.heatmap(data_frame, cmap='coolwarm', annot=True, linewidths=0.5)

plt.title("Customized Heatmap with Color Bar")
plt.show()

在上面的代碼中,我們添加了 cmap='coolwarm',將顏色主題設置為 'coolwarm'。annot=True 參數用來顯示每個單元格中的數據值,這樣能夠更方便地查看每個具體值。linewidths 參數控制每個單元格之間的線條寬度,使得數據區(qū)域劃分更加明顯。

調整顏色范圍與顯示比例

在某些情況下,我們可能希望控制熱力圖的顏色范圍。例如,將顏色范圍固定在特定的數值區(qū)間 [0, 1],這在比較不同數據集時非常有用。

plt.figure(figsize=(10, 8))
sns.heatmap(data_frame, cmap='YlGnBu', vmin=0, vmax=1, annot=True)

plt.title("Heatmap with Custom Value Range")
plt.show()

通過設置 vminvmax,我們可以定義熱力圖顏色條的最小和最大值。vmin=0vmax=1 確保顏色條范圍固定在 0 到 1 之間,即使數據范圍有所不同,這樣可以保證數據在同一個顏色尺度下進行比較。

使用真實世界數據進行熱力圖繪制

除了隨機生成的數據,熱力圖通常應用于實際的數據集。這里我們以一個典型的數據集 flights 為例,演示如何使用真實數據來繪制熱力圖。

Seaborn 提供了一些示例數據集,我們可以使用這些數據集來做一些可視化練習。下面我們使用 flights 數據集,這個數據集包含了 1949 年至 1960 年間每月的乘客量。

# 加載示例數據集
flights = sns.load_dataset('flights')

# 將數據轉換為透視表
flights_pivot = flights.pivot("month", "year", "passengers")

# 繪制熱力圖
plt.figure(figsize=(12, 8))
sns.heatmap(flights_pivot, cmap='Blues', annot=True, fmt="d")

plt.title("Flight Passengers Heatmap (1949-1960)")
plt.show()

在這里,我們首先通過 sns.load_dataset('flights') 加載了 flights 數據集,并通過 .pivot() 函數將其轉換為透視表,使得月份作為行,年份作為列,而乘客數量作為值。這樣生成的表格能夠非常方便地通過 sns.heatmap() 繪制熱力圖。參數 fmt="d" 用于指定數據值的格式,這里我們選擇了整數顯示。

進一步定制熱力圖

熱力圖在進行數據可視化時可以有多種定制化選項,例如添加標題、軸標簽、調整圖例位置等。我們可以通過 Matplotlib 提供的函數進行進一步的美化。

plt.figure(figsize=(12, 8))
sns.heatmap(flights_pivot, cmap='RdYlGn', annot=True, linewidths=.5, linecolor='gray', cbar_kws={'shrink': .8})

# 添加標題和軸標簽
plt.title("Monthly Flight Passengers (1949-1960)", fontsize=16)
plt.xlabel("Year", fontsize=14)
plt.ylabel("Month", fontsize=14)

# 顯示熱力圖
plt.show()

在上面的代碼中:

  • cbar_kws={'shrink': .8} 用來控制顏色條的大小,我們將它縮小到 80% 的原始大小。
  • linewidthslinecolor 用于控制單元格之間線條的寬度和顏色,使得每個數據單元格邊界更加清晰。
  • 通過 plt.xlabel()plt.ylabel() 添加軸標簽,便于讀者了解數據的維度。

使用多種顏色主題

熱力圖的顏色主題可以極大地影響數據的可視化效果。在 Seaborn 中,有許多顏色主題可以使用,比如 'viridis'、'coolwarm''magma' 等等。根據不同的數據特點,選擇適合的顏色主題能夠使數據的表現更加直觀。

plt.figure(figsize=(10, 8))
sns.heatmap(data_frame, cmap='magma', annot=True)

plt.title("Heatmap with Magma Colormap")
plt.show()

在這個例子中,我們使用了 'magma' 顏色主題,使得圖形呈現出一種從深紫到淺黃的漸變效果,非常適合用于對比數據中的高值和低值。

熱力圖在數據分析中的應用場景

熱力圖在數據分析中有很多實際的應用場景,比如:

  1. 相關性矩陣的可視化:熱力圖可以用來展示數據集中各個特征之間的相關性。通過查看相關性矩陣的熱力圖,可以發(fā)現哪些特征之間具有強相關性,這對于特征選擇和模型構建非常有幫助。
   # 使用 Iris 數據集
   iris = sns.load_dataset('iris')
   
   # 計算相關性矩陣
   correlation_matrix = iris.corr()
   
   # 繪制相關性矩陣的熱力圖
   plt.figure(figsize=(8, 6))
   sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=0.5)

   plt.title("Correlation Matrix Heatmap for Iris Dataset")
   plt.show()
   

在這個例子中,我們使用 iris 數據集,計算了它的相關性矩陣,然后繪制了熱力圖。這樣我們可以直觀地看到哪些變量之間存在正相關或負相關。

  1. 地理數據的可視化:在一些應用場景中,比如城市熱力圖,數據往往以地理坐標為基礎,我們可以通過顏色的深淺來表示某個城市區(qū)域的用戶數量、溫度、污染指數等。

  2. 時間序列數據的模式識別:當我們對一些時間序列數據進行可視化時,熱力圖能夠幫助我們發(fā)現周期性的模式。例如,網絡流量在一天中的不同時間段、周末和工作日的流量分布,均可以通過熱力圖來表現。

代碼總結與擴展

到這里,我們已經學習了如何使用 Python 的 Seaborn 庫來繪制各種類型的熱力圖,從基礎的熱力圖到與真實數據集結合的可視化,并對熱力圖進行了不同程度的定制和美化。通過熱力圖的顏色深淺,我們可以非常直觀地觀察數據的分布和趨勢。

在實踐中,可以通過靈活使用 Seaborn 提供的不同參數,來繪制符合需求的熱力圖,以幫助更好地分析數據。在數據科學和工程領域中,熱力圖往往與其他圖表類型相結合,共同幫助我們揭示數據背后的模式與規(guī)律。

假如你有更復雜的數據集,或者需要進行更多樣化的可視化操作,SeabornMatplotlib 提供的豐富參數和接口可以幫助你進行深度定制。使用這些工具不僅能幫助你分析數據,還能使你的圖表更加具有表現力和說服力。希望通過以上步驟,你已經掌握了 Python 中繪制熱力圖的基本方法,并且對如何根據需求進行個性化調整有了清晰的理解。

如果需要更多關于數據可視化的內容,建議你進一步探索 Python 的 BokehPlotly 之類的庫,它們可以幫助生成交互性更強的可視化圖表。交互式熱力圖在展示數據時可以給用戶帶來更好的體驗,特別是在展示大型數據集時。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容