Python 數據可視化之密度散點圖 Density Scatter Plot

🍉 CSDN 葉庭云https://yetingyun.blog.csdn.net/


密度散點圖(Density Scatter Plot),也稱為密度點圖或核密度估計散點圖,是一種數據可視化技術,主要用于展示大量數據點在二維平面上的分布情況。與傳統散點圖相比,它使用顏色或陰影來表示數據點的密度,從而更直觀地展示數據的分布情況。密度散點圖能更好地揭示數據的集中趨勢和分布模式,尤其是在數據量非常大時,避免了散點圖中點重疊導致的可視化混亂問題。

在這里插入圖片描述

密度散點圖涉及的基礎概念:

  • 散點圖(Scatter Plot):基礎的二維數據表示形式,用于展示兩個變量之間的關系。每個數據點的位置由這兩個變量的值決定。當數據量龐大時,很多點會重疊在一起,使得無法清晰看到數據的分布。

  • 核密度估計(Kernel Density Estimation,KDE):一種用于估計隨機變量概率密度函數的非參數方法。通過平滑處理來填補單獨觀測值之間的空白,從而生成一個連續的概率密度函數。KDE 通常涉及到選擇一個核函數(如高斯核)和帶寬(控制平滑程度的參數)。

  • 顏色編碼:在密度散點圖中,不同密度區域通常會使用不同顏色或深淺來表示,顏色深淺代表了該區域內數據點的密集程度。

可視化原理:

  • 數據映射:首先將每個數據點映射到二維平面上。這與普通散點圖相同,這一步驟確定了每個點在圖上的位置。

  • 密度估計:對所有數據點應用核密度估計算法。這一步驟是通過在每個數據點周圍放置一個“核”,然后對整個數據集覆蓋區域內所有核進行求和來完成的。結果是得到整個二維空間上每一位置的密度估計值。

  • 顏色映射:根據得到的密度估計值為不同區域分配顏色或深淺。高密度區域將被賦予更深或更鮮艷的顏色,而低密度區域則使用較淺或較淡的顏色。

  • 渲染顯示:最后將帶有顏色編碼的二維平面呈現出來,形成最終的密度散點圖。可選項:在繪制的密度散點圖的右方或下方展示顏色條 colorbar。

為什么要用密度散點圖?

  • 探索數據分布:通過顏色編碼表示不同密度級別,密度散點圖能夠揭示出數據中可能隱含的各種模式、聚類或趨勢。這對于探索性數據分析尤其有用,因為它可以幫助研究人員發現未被預見到的關系或行為模式。我們可以看到哪些區域有更密集的數據點,哪些區域相對稀疏。在處理包含上萬個數據點的大型數據集時,傳統散點圖可能會導致嚴重的過度繪制(overplotting),即不同數據點在圖表上的位置重疊,使得無法清晰地看到數據分布。密度散點圖通過表示區域內數據點的相對密度來解決這個問題,從而提供了一種更清晰、更有效地理解數據分布的方式。
  • 優化視覺呈現:密度散點圖通過采用漸變色或色階映射等方法,幫助清晰地展示數據,相比傳統散點圖的混亂和模糊。這樣可以更容易區分高密度和低密度區域,使整體呈現更美觀、易于理解。高靈活性的密度散點圖支持多種定制選項,比如調整顏色映射、透明度、標記大小等,以適應不同類型和規模的數據集。此外,還可以結合其他類型的可視化技術(比如輪廓線或網格)來增強表達能力。
  • 異常值檢測:密度散點圖可以幫助我們識別異常值。如果某個區域的密度遠高于其他區域,那么可能存在異常值。
  • 聚類分析:密度散點圖可以幫助我們發現數據的聚集區域。如果某個區域有較高的密度,那么這可能是一個數據聚類的中心。
  • 模型預測結果分析:密度散點圖非常適合用于可視化觀測值和擬合值的情況,能觀察到模型預測的潛在偏移與合理性。
  • 促進決策制定:在商業智能、金融分析、生物統計等領域,了解和分析復雜數據集中的模式對于指導決策至關重要。密度散點圖提供了一種直觀方法來識別關鍵變量之間的關系和動態變化,從而幫助決策者基于深入洞察做出更加明智的選擇。

總結來說,使用密度散點圖在處理大規模和 / {/} /或復雜數據集時提供了一種極具價值的工具。它不僅能夠有效解決過度繪制問題,還能揭示出隱藏在龐大數據背后的結構和模式,同時提供優雅且功能強大的視覺展示方式。無論是在科研、工業還是商業領域,掌握并應用這種技術都將極大地增強對數據的理解和利用能力。

下面講解一個帶擬合曲線的密度散點圖的繪圖示例

導入需要的依賴庫:

import numpy as np
from numpy import polyfit, poly1d
import matplotlib as mpl
from matplotlib import cm
from matplotlib import ticker
from matplotlib import colors
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from scipy.stats import gaussian_kde

繪制帶擬合曲線的密度散點圖的 Python 代碼如下

# 固定 numpy 的隨機種子
np.random.seed(2024)# 構造二維數據 x 和 y
x = np.random.normal(loc=0.0, scale=1.0, size=1000)
y = x + np.random.normal(loc=0.1, scale=1.0, size=1000)# 核密度估計
x_and_y = np.vstack([x, y])
kde = gaussian_kde(x_and_y)
z = kde(x_and_y)
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]is_cbar = True# 創建圖形和坐標軸
fig, ax = plt.subplots(figsize=(7, 4), dpi=150)# cmap: bwr、Spectral_r、viridis_r、spring、gist_rainbow_r、RdBu_r
# 可設置的 colormaps - https://matplotlib.org/tutorials/colors/colormaps.html
my_cmap = "bwr"# 繪制密度散點圖
ax.scatter(x, y, c=z, cmap=my_cmap)# 用 7 次多項式擬合,調用 poly1d 方法得到多項式系數。
y_fit = polyfit(x, y, 7)
y_fit_1d = np.poly1d(y_fit)
y_hat = np.polyval(y_fit, x)# 計算相關系數和 R^2
print('Correlation coefficients:')
print(np.corrcoef(y_hat, y))
correlation = np.corrcoef(y_hat, y)[0, 1]
R_square = correlation ** 2
print("R^2:", R_square)xtick = np.linspace(min(x), max(x), 1000)
# 擬合的多項式曲線
plt.plot(xtick, y_fit_1d(xtick), color="#FF0066", lw=2.2)# 坐標軸刻度的數值使用 Latin Modern Math 字體
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontproperties(font_latex2) for label in labels]
[label.set_color('black') for label in labels]# 設置坐標軸刻度
plt.tick_params(axis='x', direction='out', labelsize=13, length=4.6, width=1.15)
plt.tick_params(axis='y', direction='out', labelsize=13, length=4.6, width=1.15)# 展示 X 和 Y 軸的子刻度
ax.xaxis.set_minor_locator(ticker.AutoMinorLocator())
ax.yaxis.set_minor_locator(ticker.AutoMinorLocator())# 顏色條的設置:刻度、字體、字號等
if is_cbar:norm = colors.Normalize(vmin=np.min(z), vmax=np.max(z))cbar = plt.colorbar(cm.ScalarMappable(norm=norm, cmap=my_cmap), ax=ax)cbar.ax.set_ylabel("Density", fontproperties=font_latex2, labelpad=12)cbar.ax.tick_params(labelsize=12)labels = cbar.ax.get_xticklabels() + cbar.ax.get_yticklabels()[label.set_fontproperties(font_latex2) for label in labels][label.set_color('black') for label in labels]tick_locator = ticker.MaxNLocator(nbins=8)cbar.locator = tick_locatorcbar.update_ticks()# 設置 X 軸和 Y 軸的刻度值范圍
ax.set_xlim(left=-6, right=6.0000001)
ax.set_xticks(np.arange(-6, 6.000001, step=2.0))
ax.set_ylim(bottom=-6, top=6.0000001)
ax.set_yticks(np.arange(-6, 6.000001, step=2.0))# 畫圖對象周圍的框的加粗一點
lw = 1.25
ax.spines["right"].set_linewidth(lw)
ax.spines["left"].set_linewidth(lw)
ax.spines["top"].set_linewidth(lw)
ax.spines["bottom"].set_linewidth(lw)# 設置 X 軸和 Y 軸的標簽、字體、刻度和刻度標簽在內的坐標軸邊界框中的間距
plt.xlabel("X Label", fontproperties=font_latex1, labelpad=8)
plt.ylabel("Y Label", fontproperties=font_latex1, labelpad=8)# 設置標題 字體 大小 以及距繪圖對象的距離
plt.title("Python Matplotlib - Density Scatter Plot",fontproperties=font_latex2, pad=12)# 文本的位置是根據數據坐標來確定的
ax.text(x=-5, y=4.5, s=r'$\ {R^2} = 0.522$', usetex=True,fontsize=14, fontweight="bold")# 顯示網格  虛線和透明度
plt.grid(alpha=0.360, ls="--", which="major", color="#A9A9A9")
# 緊湊布局
plt.tight_layout()plt.savefig("./Figures/密度散點圖.png", dpi=300, bbox_inches="tight")
plt.show()

整體解釋:這段代碼首先導入了所需的庫,然后生成了測試數據 x x x y y y實際應用還可能是真實值 y y y 和預測值 y ^ \hat y y^?)。接著,它使用核密度估計(KDE)來計算數據的密度分布。之后,它繪制了一個密度散點圖,并使用多項式擬合來生成一個曲線。最后,它計算了相關系數和 R 2 R^2 R2 值,并設置了各種圖形屬性,如坐標軸刻度、顏色條、網格等。最后,它將圖像保存為一個 .png 文件并顯示出來。

可視化結果如下所示

在這里插入圖片描述


📚? 參考鏈接:

  • 使用 Python 繪制散點密度圖(用顏色標識密度)
  • 復現頂刊 RSE 散點密度驗證圖(附代碼)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696248.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Swift基礎知識:24.Swift可選鏈

在 Swift 中,可選鏈(Optional Chaining)是一種用于調用可選類型屬性、方法或下標的安全方式。可選鏈允許我們在調用鏈中的任何一個屬性、方法或下標返回 nil 時,整個調用鏈仍然可以繼續執行,而不會因為其中的任何一個可…

一樣的代碼不同項目跳轉頁面報404的解決辦法

今天收到實施反饋的一個問題,點項目名稱跳轉項目詳情頁面時,有的頁面跳轉顯示正常,有的頁面跳轉報404錯誤。錯誤如下: 發現報錯的項目都有一個共性就是有特殊字符“[ ]” , 解決的辦法就是把帶有特殊字符的字段 用 encodeURI()…

Java SE 入門到精通—4.抽象類與接口【Java】

抽象類 同接口一樣,用來約束子類,限制子類必須擁有某些方法,比普通類多了個抽象方法,用抽象方法該類必為抽象類 概念 沒有具體的對象,具體的方法的一個類 abstract關鍵字聲明為抽象類/方法 一個類中有抽象方法則該…

統計前端傳過來的Req的非空屬性個數的工具類

背景 日常開發中,我們通常會根據前端傳過來的實體類的屬性個數去做邏輯判斷,下面的是判斷屬性個數的工具類。 工具類 public static Integer nonNullFieldCount(Req req) {if (req null) {return 0;}int nonNullFieldCount 0;Field[] fields req.ge…

【Django】Django自定義后臺表單——對一個關聯外鍵對象同時添加多個內容

以官方文檔為例: 一個投票問題包含多個選項,基本的表單設計只能一個選項一個選項添加,效率較低,如何在表單設計中一次性添加多個關聯選項? 示例代碼: from django.contrib import adminfrom .models impo…

Java中的關鍵字有哪些?它們各自的作用是什么?請詳細說明?Java中的訪問修飾符有哪些?它們的訪問權限是怎樣的?

1、Java中的關鍵字有哪些?它們各自的作用是什么?請詳細說明? Java中的關鍵字是預先定義好的,具有特殊含義的標識符,用于表示數據類型、程序結構或控制流程等。以下是Java中的一些常用關鍵字及其作用: abs…

【軟件架構】02-復雜度來源

1、性能 1)單機 受限于主機的CPU、網絡、磁盤讀寫速度等影響 在多線程的互斥性、并發中的同步數據狀態等; 擴展:硬件資源、增大線程池 2)集群 微服務化拆分,導致調用鏈過長,網絡傳輸的消耗過多。 集…

嵌入式Qt 計算器核心算法_3

一.后綴表達式實現算數運算思路 二.算法實現 #include "QCalculatorDec.h"QCalculatorDec::QCalculatorDec() {m_exp "";m_result ""; }QCalculatorDec::~QCalculatorDec() {}bool QCalculatorDec::isDigitOrDot(QChar c) {return ((0 < c)…

基于SpringBoot的景區旅游管理系統

項目介紹 本期給大家介紹一個 景區旅游管理 系統.。主要模塊有首頁&#xff0c;旅游路線&#xff0c;旅行攻略&#xff0c;在線預定。管理員可以登錄管理后臺對用戶進行管理&#xff0c;可以添加酒店&#xff0c;景區&#xff0c;攻略&#xff0c;路線等信息。整體完成度比較高…

一文搞懂match、match_phrase與match_phrase_prefix的檢索過程

一、在開始之前&#xff0c;完成數據準備&#xff1a; # 創建映射 PUT /tehero_index {"settings": {"index": {"number_of_shards": 1,"number_of_replicas": 1}},"mappings": {"_doc": {"dynamic": …

探索氣膜球幕影院:未來的電影體驗

氣膜球幕影院作為一種新興的電影放映方式&#xff0c;正逐漸成為人們關注的焦點。它采用了充氣式膜結構&#xff0c;可以為觀眾帶來 360 度全景的觀影體驗&#xff0c;讓人仿佛置身于電影之中。本文將介紹氣膜球幕影院的特點、技術原理以及未來的發展前景。 傳說在古代&#x…

Linux系統運維命令:使用 tail,grep組合命令(包括wc,sort,awk,sed等),可以方便的查閱和操作正在改變的日志文件的具體內容

一、命令介紹 1、tail命令 tail命令是Linux系統中常用的命令之一&#xff0c;用于查看文件的末尾內容。它具有許多有用的選項&#xff0c;可以幫助用戶輕松地查找并顯示文件中的信息。 它默認顯示文件的最后10行&#xff0c;但可以通過各種選項來定制輸出的行數、字節數等。ta…

十四、圖像幾何形狀繪制

項目功能實現&#xff1a;矩形、圓形、橢圓等幾何形狀繪制&#xff0c;并與原圖進行相應比例融合 按照之前的博文結構來&#xff0c;這里就不在贅述了 一、頭文件 drawing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class DRAWING { public:void…

Python筆記-super().init(root)的作用

假設我們有一個名為Animal的父類&#xff0c;它有一個屬性color&#xff0c;在其構造函數__init__中被初始化&#xff1a; class Animal:def __init__(self, color):self.color color現在&#xff0c;我們想創建一個Animal的子類&#xff0c;名為Dog。Dog類有自己的屬性name&…

QPaint繪制自定義儀表盤組件01

網上抄別人的&#xff0c;只是放這里自己看一下&#xff0c;看完就刪掉 ui Dashboard.pro QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomm…

【xss跨站漏洞】xss漏洞前置知識點整理

xss漏洞成因 xss漏洞是一種前端javascript產生的漏洞。 我們網站基本都是會用到javascript編寫一些東西&#xff0c;瀏覽器也能直接識別javascript。 如果有一個地方能夠輸入文字&#xff0c;但是他又沒有過濾你的輸入&#xff0c;那么自己或者他人看到你輸入的javascript代…

JVM知識——安全點

安全點是JVM要準備進行垃圾回收時&#xff0c;選定一些特定的位置&#xff0c;當應用程序線程執行到這些位置時&#xff0c;安全的先暫停下來&#xff0c;以便JVM執行GC線程進行垃圾回收。 JVM在字節碼指令中會選取一些指令作為安全點&#xff0c;安全點的選取一般是循環結束、…

課時42:表達式_運算符_bc計算

3.1.5 bc計算 學習目標 這一節&#xff0c;我們從 基礎知識、簡單實踐、小結 三個方面來學習。 基礎知識 簡介 bc是一種任意精度的計算語言&#xff0c;提供了語法結構&#xff0c;比如條件判斷、循環等&#xff0c;功能是很強大的&#xff0c;還能進行進制轉換。常見參數-…

week04day02(爬蟲02)

<span>: 通常用于對文本的一部分進行樣式設置或腳本操作。<a>: 定義超鏈接&#xff0c;用于創建鏈接到其他頁面或資源的文本。<img>: 用于插入圖像。<br>: 用于插入換行。 姓名&#xff1a;<input type"text" value"lisi">…

嵌入式培訓機構四個月實訓課程筆記(完整版)-Linux ARM驅動編程第七天-內核函數接口(物聯技術666)

鏈接&#xff1a;https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取碼&#xff1a;1688 //************************************************** #include <linux/module.h> /*module_init()*/ #include <linux/kernel.h> /* printk() *…