亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

為什么選擇條形熱圖

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

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

代碼全景

先來看一段充滿 “數(shù)學美感” 的代碼,它模擬了 15 個帶隨機峰值的信號,并將它們優(yōu)雅地排列成熱圖:

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

效果如下

代碼逐行解析

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

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

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

② 峰值位置定制

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

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

③ 波形函數(shù)替換

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

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

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

階梯函數(shù):np.where(x > p, 1, 0)(模擬開關信號)

④ 噪聲調(diào)整

np.random.randn(len(x)) * 2控制噪聲強度,*2是標準差。想讓信號更 “干凈”?改成*1;想突出噪聲?試試*5~

⑤ 信號縮放與基線

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

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

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

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

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

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

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

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

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

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

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

個性化改造

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

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

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

場景二:想換一種更專業(yè)的配色方案

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

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

場景三:樣本標簽太多,Y 軸標簽擠在一起

三大解決方案來襲:

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

截斷標簽:用縮寫(如 “Samp A”→“A”),或生成標簽時用簡寫:

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

旋轉(zhuǎn)標簽:如果必須顯示全稱,嘗試輕微旋轉(zhuǎn):

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

擴展應用

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

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

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

材料科學:光譜吸收曲線

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

應用:對比材料的特征吸收峰位置和強度,一鍵定位最佳制備工藝~

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

X 軸:頻率(Hz),Y 軸:不同傳感器節(jié)點,顏色:信號強度

應用:監(jiān)測設備振動信號,快速定位異常頻率的傳感器節(jié)點~

關鍵可替換點總結(jié)

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

總結(jié)

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

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

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

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

相關文章

  • python實現(xiàn)遍歷文件夾修改文件后綴

    python實現(xiàn)遍歷文件夾修改文件后綴

    這篇文章主要介紹了python實現(xiàn)遍歷文件夾修改文件后綴,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 將Python腳本打包成MACOSAPP程序過程

    將Python腳本打包成MACOSAPP程序過程

    我們編寫python程序時,有時候需要想將python腳本轉(zhuǎn)成可執(zhí)行的程序或者app,可以直接通過雙擊執(zhí)行即可,像Windows上可以將其通過工具轉(zhuǎn)換成exe程序,那么在MACOS下我們可以將其打包成MACOS APP程序
    2021-09-09
  • Python循環(huán)結(jié)構全面解析

    Python循環(huán)結(jié)構全面解析

    循環(huán)中的代碼會執(zhí)行特定的次數(shù),或者是執(zhí)行到特定條件成立時結(jié)束循環(huán),或者是針對某一集合中的所有項目都執(zhí)行一次,這篇文章給大家介紹Python循環(huán)結(jié)構解析,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • Pytorch 實現(xiàn)變量類型轉(zhuǎn)換

    Pytorch 實現(xiàn)變量類型轉(zhuǎn)換

    這篇文章主要介紹了Pytorch 實現(xiàn)變量類型轉(zhuǎn)換操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python將每個單詞按空格分開并保存到文件中

    python將每個單詞按空格分開并保存到文件中

    這篇文章主要介紹了python將每個單詞按空格分開并保存到文件中,需要的朋友可以參考下
    2018-03-03
  • python實現(xiàn)快速文件格式批量轉(zhuǎn)換的方法

    python實現(xiàn)快速文件格式批量轉(zhuǎn)換的方法

    這篇文章主要介紹了python實現(xiàn)快速文件格式批量轉(zhuǎn)換的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • python射線法判斷一個點在圖形區(qū)域內(nèi)外

    python射線法判斷一個點在圖形區(qū)域內(nèi)外

    這篇文章主要為大家詳細介紹了python射線法判斷一個點在圖形區(qū)域內(nèi)外,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python利用pynimate實現(xiàn)制作動態(tài)排序圖

    Python利用pynimate實現(xiàn)制作動態(tài)排序圖

    這篇文章主要為大家詳細介紹了Python如何利用pynimate實現(xiàn)制作動態(tài)排序圖,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-02-02
  • django寫單元測試的方法

    django寫單元測試的方法

    這篇文章主要介紹了django寫單元測試的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • python實現(xiàn)整數(shù)的二進制循環(huán)移位

    python實現(xiàn)整數(shù)的二進制循環(huán)移位

    這篇文章主要為大家詳細介紹了python實現(xiàn)整數(shù)的二進制循環(huán)移位,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評論