欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python繪制條形熱圖的示例代碼

 更新時(shí)間:2025年07月01日 09:20:06   作者:Code_Verse  
條形熱圖(Strip Heatmap) 就像一位魔法設(shè)計(jì)師,用色彩編碼和有序排列讓復(fù)雜數(shù)據(jù)變得清爽直觀,本文我們就來(lái)學(xué)習(xí)一下如何使用Python繪制簡(jiǎn)單的條形熱圖吧

為什么選擇條形熱圖

在科研數(shù)據(jù)分析和工程信號(hào)處理領(lǐng)域,當(dāng)我們需要同時(shí)展示多個(gè)樣本的連續(xù)變量波形時(shí),傳統(tǒng)的折線圖往往顯得雜亂無(wú)章 —— 想象一下,15 條波形曲線在同一個(gè)坐標(biāo)系里交織,是不是瞬間讓人眼花繚亂?這時(shí)候,條形熱圖(Strip Heatmap) 就像一位魔法設(shè)計(jì)師,用色彩編碼和有序排列讓復(fù)雜數(shù)據(jù)變得清爽直觀!

今天我們要分享的案例是:通過(guò)模擬帶噪聲的高斯峰值信號(hào),用 Seaborn 繪制高顏值條形熱圖,展示不同樣本的波形差異。這種可視化方法廣泛應(yīng)用于光譜分析、傳感器信號(hào)處理、生物醫(yī)學(xué)數(shù)據(jù)(如心電圖波形)等場(chǎng)景,能讓你一眼捕捉到數(shù)據(jù)的峰值位置、強(qiáng)度差異和噪聲分布~

代碼全景

先來(lái)看一段充滿(mǎn) “數(shù)學(xué)美感” 的代碼,它模擬了 15 個(gè)帶隨機(jī)峰值的信號(hào),并將它們優(yōu)雅地排列成熱圖:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 生成隨機(jī)數(shù)據(jù)(核心可替換區(qū)域①)
np.random.seed(0) # 固定隨機(jī)種子,確保結(jié)果可復(fù)現(xiàn)
x = np.arange(0, 91) # X軸范圍:0到90(代表信號(hào)的連續(xù)變量,如波長(zhǎng)、時(shí)間等)
n_samples = 15 # 樣本數(shù)量,可改為你的實(shí)際樣本數(shù)
data = []
# 生成每個(gè)樣本的峰值位置(35-55之間的隨機(jī)值,可替換為真實(shí)峰值數(shù)據(jù)②)
peaks = np.random.uniform(35, 55, size=n_samples)
for p in peaks:
# 高斯函數(shù)生成峰值波形(可替換為自定義函數(shù)③,如正弦波、指數(shù)衰減等)
profile = np.exp(-(x - p)**2 / (2 * 8**2)) # 標(biāo)準(zhǔn)差8控制峰寬
noise = np.random.randn(len(x)) * 2 # 高斯噪聲,可調(diào)整噪聲強(qiáng)度④
# 信號(hào)疊加:基線10 + 峰值信號(hào)*40 + 噪聲(可修改基線和縮放因子⑤)
row = 10 + profile * 40 + noise
data.append(row)
# 創(chuàng)建數(shù)據(jù)框(核心可替換區(qū)域⑥:替換為你的真實(shí)數(shù)據(jù))
df = pd.DataFrame(data, columns=x) # columns對(duì)應(yīng)X軸變量,如波長(zhǎng)、時(shí)間點(diǎn)
labels = [f"Samp {chr(ord('A')+i)}" for i in range(n_samples)] # 樣本標(biāo)簽
df.index = labels # 設(shè)置行名為樣本標(biāo)簽
# 繪制條形熱圖(可視化參數(shù)可靈活調(diào)整⑦)
plt.figure(figsize=(12, 6)) # 調(diào)整畫(huà)布大小
sns.heatmap(
df.iloc[::-1], # 反轉(zhuǎn)行順序,讓第一個(gè)樣本顯示在頂部
cmap="coolwarm", # 藍(lán)-紅發(fā)散色階,適合顯示有基線的信號(hào)
vmin=0, vmax=50, # 固定顏色范圍,確保不同數(shù)據(jù)對(duì)比一致
cbar=True, # 顯示顏色條
linewidths=0.5, # 樣本間添加白色分隔線
linecolor='white' # 分隔線顏色
)
plt.title("條形熱圖:帶噪聲的高斯峰值信號(hào)", fontsize=16, pad=20)
plt.xlabel("K (w) (可替換為實(shí)際變量名,如波長(zhǎng)/nm、時(shí)間/ms)", fontsize=14)
plt.ylabel("樣本", fontsize=14)
# 定制X軸刻度:每10個(gè)單位顯示一個(gè)刻度
plt.xticks(np.arange(0, len(x), 10), np.arange(0, len(x), 10))
# 定制Y軸標(biāo)簽:反轉(zhuǎn)順序并取消旋轉(zhuǎn),讓標(biāo)簽水平顯示
plt.yticks(np.arange(len(labels)) + 0.5, labels[::-1], rotation=0)
plt.tight_layout() # 自動(dòng)調(diào)整布局,避免標(biāo)簽重疊
plt.show()

效果如下

代碼逐行解析

1.數(shù)據(jù)生成:打造帶峰值的模擬信號(hào)(核心可替換區(qū))

① X 軸范圍與樣本數(shù)量

x = np.arange(0, 91)定義了信號(hào)的連續(xù)變量,比如這里模擬的是 0-90 的 “K (w)” 變量(實(shí)際可替換為波長(zhǎng)、時(shí)間、溫度等)。n_samples是樣本數(shù)量,直接改為你的實(shí)際樣本數(shù),比如 30 個(gè)傳感器數(shù)據(jù)。

② 峰值位置定制

peaks = np.random.uniform(35, 55, size=n_samples)生成 35-55 之間的隨機(jī)峰值位置。如果有真實(shí)峰值數(shù)據(jù),直接替換為列表或數(shù)組,例如:

peaks = [40.2, 52.1, 38.5, ...] # 你的真實(shí)峰值位置

③ 波形函數(shù)替換

目前用高斯函數(shù)np.exp(-(x - p)**2 / (2 * 8**2))生成鐘形曲線,你可以換成任何自定義函數(shù)!比如:

正弦波:np.sin(x * 0.1 + p)(模擬周期性信號(hào))

指數(shù)衰減:np.exp(-(x - p)/10)(模擬衰減信號(hào))

階梯函數(shù):np.where(x > p, 1, 0)(模擬開(kāi)關(guān)信號(hào))

④ 噪聲調(diào)整

np.random.randn(len(x)) * 2控制噪聲強(qiáng)度,*2是標(biāo)準(zhǔn)差。想讓信號(hào)更 “干凈”?改成*1;想突出噪聲?試試*5~

⑤ 信號(hào)縮放與基線

10 + profile * 40 + noise中,10是基線(信號(hào)最小值),*40是峰值縮放因子。根據(jù)真實(shí)數(shù)據(jù)范圍調(diào)整這兩個(gè)值,比如基線改為 20,縮放因子改為 30。

2.數(shù)據(jù)結(jié)構(gòu)化:用 Pandas 構(gòu)建表格(零代碼替換區(qū))

⑥ 替換真實(shí)數(shù)據(jù)

如果你有現(xiàn)成的 CSV 數(shù)據(jù),直接用pd.read_csv('你的數(shù)據(jù).csv')讀取,確保列是 X 軸變量(如波長(zhǎng)點(diǎn)),行是樣本,然后跳過(guò)data生成步驟。例如:

df = pd.read_csv('sensor_data.csv', index_col=0) # index_col=0假設(shè)第一列為樣本標(biāo)簽

3.可視化魔法:Seaborn 熱圖的 “美顏秘籍”

⑦ 熱圖參數(shù)調(diào)優(yōu)

cmap="coolwarm":藍(lán) - 紅配色適合顯示有基線的信號(hào),冷色代表低值,暖色代表高值。換成"viridis"(綠 - 黃 - 紅)或"magma"(黑 - 紅 - 黃)會(huì)有不同效果~

vmin=0, vmax=50:固定顏色映射范圍,避免不同數(shù)據(jù)導(dǎo)致色階變化,確保跨圖對(duì)比一致。如果數(shù)據(jù)范圍是 10-60,就改為vmin=10, vmax=60。

linewidths=0.5, linecolor='white':在樣本間添加細(xì)白分隔線,讓每個(gè)條形更清晰,就像給數(shù)據(jù) “穿上整齊的格子衫”~

df.iloc[::-1]:反轉(zhuǎn)行順序,讓第一個(gè)樣本顯示在熱圖頂部(默認(rèn)是底部),符合從 “上到下” 的閱讀習(xí)慣。

個(gè)性化改造

場(chǎng)景一:我的數(shù)據(jù)不是高斯峰值,是真實(shí)傳感器波形怎么辦

直接替換信號(hào)生成部分!假設(shè)你有一批心電圖(ECG)數(shù)據(jù),每個(gè)樣本是 500 個(gè)時(shí)間點(diǎn)的電壓值:

  • 刪除peaks和循環(huán)生成profile的代碼
  • 用pd.read_csv讀取 CSV 文件,確保每行是一個(gè)樣本,每列是時(shí)間點(diǎn)
  • 跳過(guò)噪聲生成(如果數(shù)據(jù)已含噪聲)或添加自定義噪聲

場(chǎng)景二:想換一種更專(zhuān)業(yè)的配色方案

Seaborn 提供了超多色階,試試這些組合:

  • 科研論文常用:cmap="rocket"(藍(lán) - 黃 - 紅,適合單峰數(shù)據(jù))、cmap="bwr"(藍(lán) - 白 - 紅,突出基線對(duì)稱(chēng)數(shù)據(jù))
  • 高對(duì)比度模式:cmap="coolwarm_r"(反轉(zhuǎn)色階,讓高值顯示為藍(lán)色)
  • 漸變色推薦:搭配vmin和vmax使用,比如光譜數(shù)據(jù)用cmap="hsv",呈現(xiàn)彩虹色漸變~

場(chǎng)景三:樣本標(biāo)簽太多,Y 軸標(biāo)簽擠在一起

三大解決方案來(lái)襲:

縮小字體:plt.yticks(..., fontsize=10)

截?cái)鄻?biāo)簽:用縮寫(xiě)(如 “Samp A”→“A”),或生成標(biāo)簽時(shí)用簡(jiǎn)寫(xiě):

labels = [f"A{i}" for i in range(n_samples)] # 生成A0, A1, ..., A14

旋轉(zhuǎn)標(biāo)簽:如果必須顯示全稱(chēng),嘗試輕微旋轉(zhuǎn):

plt.yticks(..., rotation=15) # 15度傾斜,更易閱讀

擴(kuò)展應(yīng)用

生物醫(yī)學(xué):心電圖波形對(duì)比

X 軸:時(shí)間(ms),Y 軸:不同患者,顏色:電壓(μV)

應(yīng)用:快速識(shí)別異常波形(如峰值偏移、節(jié)律異常),比單獨(dú)看折線圖清晰 10 倍!

材料科學(xué):光譜吸收曲線

X 軸:波長(zhǎng)(nm),Y 軸:不同薄膜樣品,顏色:吸光度

應(yīng)用:對(duì)比材料的特征吸收峰位置和強(qiáng)度,一鍵定位最佳制備工藝~

工程信號(hào):傳感器陣列數(shù)據(jù)

X 軸:頻率(Hz),Y 軸:不同傳感器節(jié)點(diǎn),顏色:信號(hào)強(qiáng)度

應(yīng)用:監(jiān)測(cè)設(shè)備振動(dòng)信號(hào),快速定位異常頻率的傳感器節(jié)點(diǎn)~

關(guān)鍵可替換點(diǎn)總結(jié)

替換場(chǎng)景代碼位置示例操作
X 軸變量名稱(chēng)x = np.arange(0, 91)改為x = np.linspace(200, 800, 301)(波長(zhǎng) 200-800nm,301 個(gè)點(diǎn))
樣本數(shù)量n_samples = 15改為n_samples = 30(30 個(gè)樣本)
峰值位置(真實(shí)數(shù)據(jù))peaks = np.random...改為peaks = [45.2, 50.1, 38.7](手動(dòng)輸入峰值)
波形函數(shù)profile = np.exp(...)改為profile = np.sin(x*0.05)(正弦波)
導(dǎo)入真實(shí)數(shù)據(jù)df = pd.DataFrame(data...)改為df = pd.read_excel('你的數(shù)據(jù).xlsx', index_col=0)
顏色映射cmap="coolwarm"改為cmap="viridis"(綠 - 黃 - 紅漸變)

總結(jié)

通過(guò)這篇攻略,我們掌握了從信號(hào)生成到熱圖繪制的全流程,更重要的是學(xué)會(huì)了如何將代碼適配到真實(shí)場(chǎng)景。條形熱圖的核心優(yōu)勢(shì)在于:

  • 有序排列:樣本按行排列,避免折線圖的重疊混亂
  • 色彩編碼:用顏色深淺直觀展示數(shù)值大小,比數(shù)字表格更易捕捉規(guī)律
  • 細(xì)節(jié)可控:從色階到分隔線,每個(gè)像素都能定制,滿(mǎn)足論文、報(bào)告、PPT 的不同需求

現(xiàn)在,你只需替換代碼中的6 處核心區(qū)域(數(shù)據(jù)生成、數(shù)據(jù)框、可視化參數(shù)),就能將這段代碼變成你的專(zhuān)屬可視化工具~

到此這篇關(guān)于Python繪制條形熱圖的示例代碼的文章就介紹到這了,更多相關(guān)Python條形熱圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論