【Python】數據可視化之分布圖

分布圖主要用來展示某些現象或數據在地理空間、時間或其他維度上的分布情況。它可以清晰地反映出數據的空間位置、數量、密度等特征,幫助人們更好地理解數據的內在規律和相互關系。

目錄

單變量分布

變量關系組圖

雙變量關系

核密度估計

山脊分布圖


單變量分布

distplot() 函數是 Seaborn 庫中用于繪制單變量分布圖的一個非常有用的函數。值得注意的是,從 Seaborn 的較新版本(特別是從0.11.0版本開始)開始,distplot() 函數已經被標記為棄用(deprecated),并建議使用更具體和靈活的繪圖函數,如 histplot() 用于直方圖,kdeplot() 或 displot()用于更復雜的分布可視化。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set(style="darkgrid")
# 創建一個2行2列的子圖,每個子圖的大小為8x8,不共享x軸和y軸
f, axes = plt.subplots(2, 2, figsize=(8, 8), sharex=False, sharey=False)
sns.despine(left=True)
# 創建一個隨機數生成器,種子為10
rs = np.random.RandomState(8)
# 生成一個包含1000個隨機數的數組
d = rs.normal(size=1000)
# 繪制簡單的直方圖,kde=False不繪制核密度估計圖,下列其他圖類似
sns.distplot(d, kde=False, color="r", ax=axes[0, 0])
# 使用seaborn庫繪制d的分布圖,不繪制直方圖,繪制rug圖,顏色為黃色,繪制在axes[0, 1]上
sns.distplot(d, hist=False, rug=True, color="y", ax=axes[1, 0])
# 使用seaborn庫繪制d的分布圖,不繪制直方圖,顏色為藍色,kde_kws參數設置陰影為True,繪制在axes[1, 0]上
sns.distplot(d, hist=False, color="b", kde_kws={"shade": True}, ax=axes[0, 1])
# 使用seaborn庫中的distplot函數繪制直方圖,參數d為數據,color為顏色,ax為坐標軸
sns.distplot(d, color="g", ax=axes[1, 1])
# 設置坐標軸的y軸刻度
plt.setp(axes, yticks=[])
plt.tight_layout()

變量關系組圖

pairplot是Seaborn庫中的一個強大且多功能的繪圖函數,它主要用于繪制數據集中所有可能的成對關系圖。這個函數通過生成一個網格圖,每個單元格展示一個變量對的分布圖(如散點圖、直方圖或核密度估計圖),非常適合于初步的數據探索和可視化。

  • data:指定要繪制的數據集,通常是一個pandas的DataFrame對象。
  • vars:可選參數,用于指定要繪制哪些變量的關系圖。如果不指定,則默認繪制數據集中所有數值型變量的關系圖。
  • hue:可選參數,用于指定一個分類變量,根據該變量的不同值對數據進行分組展示。
  • kind:控制非對角線上圖表類型的參數,可選"scatter"(散點圖)和"reg"(回歸圖)等。但需要注意的是,pairplot的kind參數可能不如其他Seaborn圖表那樣靈活,因為它主要關注于成對關系的展示。
  • diag_kind:控制對角線上圖表類型的參數,可選"hist"(直方圖)和"kde"(核密度估計圖)等。
  • markers:控制散點圖中數據點的標記類型,用于區分不同的數據點或組別。
df = sns.load_dataset("iris")
sns.pairplot(df)

可以控制指定位置的圖表類型,比如對角線使用核密度估計圖??

sns.pairplot(df, diag_kind="kde")

?也可以對數據進行分組展示

sns.pairplot(iris, hue="species")  

雙變量關系

雙變量關系(Bivariate Relationship)是統計學和數據分析中的一個基本概念,它指的是兩個變量之間的關聯或相互作用。在這種關系中,一個變量的變化可能會影響到另一個變量的變化,但這并不意味著一個變量是另一個變量的原因。雙變量關系可以是線性的,也可以是非線性的,它可以是正相關、負相關,或者根本沒有明確的關聯,即零相關。

jointplot是Seaborn庫中的一個強大工具,用于可視化兩個變量的聯合分布及其關系。它結合了多種圖表類型,如散點圖、直方圖、核密度估計圖(KDE)等,提供了對數據分布和關系的深入理解。jointplot能夠同時展示兩個變量的聯合分布以及它們各自的邊緣分布,從而幫助用戶全面理解變量之間的關系和分布情況。

  • x, y:指定要繪制的兩個變量,分別作為x軸和y軸的數據。
  • data:包含x和y變量的數據集,通常是一個pandas的DataFrame對象。
  • kind:指定繪制圖表的類型,如'scatter'(散點圖)、'kde'(核密度估計圖)、'hex'(蜂窩圖)等。
  • color:設置圖表中元素的顏色。
  • size:設置圖表的大小(正方形)。
  • ratio:設置中心圖與側邊圖的比例。
  • joint_kws, marginal_kws:分別用于自定義聯合圖和邊緣圖的樣式。
# 創建一個隨機數生成器,種子為8
rs = np.random.RandomState(8)
# 生成1000個服從Gamma分布的隨機數
x = rs.gamma(8, size=1000)
# 生成1000個服從正態分布的隨機數,并乘以-0.5
y = -.5 * x + rs.normal(size=1000)
# x和y為數據,kind參數指定圖形類型為六邊形,color參數指定顏色為紅色
sns.jointplot(x=x, y=y, kind="hex", color="r")

# 加載tips數據集
tips = sns.load_dataset("tips")
# ,x軸為total_bill,y軸為tip,數據為tips,類型為線性回歸,x軸范圍為0到50,y軸范圍為0到12,顏色為綠色,高度為6
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg",xlim=(0, 50), ylim=(0, 12), color="g", height=6)

?

核密度估計

核密度估計(Kernel Density Estimation, KDE)是一種在概率論中用來估計未知的密度函數的非參數檢驗方法,由Rosenblatt(1955)和Emanuel Parzen(1962)提出,又稱為Parzen窗(Parzen window)。核密度估計的基本思想是,對于給定的數據樣本,通過核函數(通常是對稱且非負的密度函數,如高斯函數)來擬合數據點的局部密度,進而估計整個數據的密度函數。具體來說,對于數據集中的每一個點,都以其為中心放置一個核函數,然后對所有核函數進行加權平均(或求和),得到的結果即為整個數據集的密度估計。

# 設置繪圖風格為暗色
sns.set(style="dark")
# 創建一個隨機數生成器,種子為8
rs = np.random.RandomState(8)
# 生成隨機數的數組
x, y = rs.randn(2, 1000)
# 繪制x和y的核密度估計圖
sns.kdeplot(x=x, y=y,color="r")
# 調整布局,使圖形更加緊湊
f.tight_layout()

# 設置繪圖風格為darkgrid
sns.set(style="darkgrid")
# 加載iris數據集
iris = sns.load_dataset("iris")
# 查詢出species為setosa的數據
setosa = iris.query("species == 'setosa'")
# 查詢出species為virginica的數據
virginica = iris.query("species == 'virginica'")
# 創建一個8x8的繪圖區域
f, ax = plt.subplots(figsize=(8, 8))
# 設置繪圖區域的縱橫比為1:1
ax.set_aspect("equal")
# 繪制setosa數據的密度圖,使用Blues顏色映射,并設置陰影和最低值陰影
ax = sns.kdeplot(x=setosa.sepal_width, y=setosa.sepal_length,cmap="Blues", shade=True, shade_lowest=False)
# 繪制virginica數據的密度圖,使用Reds顏色映射,并設置陰影和最低值陰影
ax = sns.kdeplot(x=virginica.sepal_width, y=virginica.sepal_length,cmap="Reds", shade=True, shade_lowest=False)
# 獲取Reds顏色映射的倒數第二個顏色
red = sns.color_palette("Reds")[-2]
# 獲取Blues顏色映射的倒數第二個顏色
blue = sns.color_palette("Blues")[-2]
# 在繪圖區域中添加文本,顯示species為virginica的數據
ax.text(2.5, 8.2, "virginica", size=16, color=blue)
# 在繪圖區域中添加文本,顯示species為setosa的數據
ax.text(3.8, 4.5, "setosa", size=16, color=red)

山脊分布圖

山脊分布圖,也稱為山脊圖(Ridge Plot)或Joy Plot,是一種數據可視化的方法,主要用于展示一個或多個組的數據分布情況。山脊圖通過平滑的密度曲線來表示每個組的數據分布,這些曲線沿垂直軸堆疊排列,形成類似山脊的視覺效果。制作基于核密度估計(Kernel Density Estimation, KDE),這是一種估計概率密度函數的非參數方式。通過KDE,可以對每個組的數據進行平滑處理,從而得到連續的密度曲線。

# 創建一個隨機數生成器,種子為8
rs = np.random.RandomState(8)
# 生成500個隨機數
x = rs.randn(500)
# 創建一個字符串,重復50次
g = np.tile(list("ABCDEFGHIJ"), 50)
# 創建一個DataFrame,包含x和g兩列
df = pd.DataFrame(dict(x=x, g=g))
# 將g列中的字符轉換為ASCII碼
m = df.g.map(ord)
# 將m加到x列上
df["x"] += m
# 創建一個顏色調色板
pal = sns.cubehelix_palette(10, rot=-.5, light=.7)
# 創建一個FacetGrid,按g列進行分面,hue參數設置為g,aspect參數設置為15,height參數設置為0.5,palette參數設置為pal
g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)
# 在每個分面上繪制核密度圖,clip_on參數設置為False,shade參數設置為True,alpha參數設置為1,lw參數設置為1.5,bw參數設置為0.2
g.map(sns.kdeplot, "x", clip_on=False, shade=True, alpha=1, lw=1.5, bw=.2)
# 在每個分面上繪制核密度圖,clip_on參數設置為False,color參數設置為白色,lw參數設置為2,bw參數設置為0.2
g.map(sns.kdeplot, "x", clip_on=False, color="w", lw=2, bw=.2)
# 在每個分面上繪制水平線,y參數設置為0,lw參數設置為2,clip_on參數設置為False
g.map(plt.axhline, y=0, lw=2, clip_on=False)
# 定義一個函數,用于在每個分面上添加標簽
def label(x, color, label):# 獲取當前的坐標軸ax = plt.gca()# 在坐標軸上添加文本,字體加粗,顏色為color,文本內容為label,水平對齊方式為左對齊,垂直對齊方式為居中對齊,坐標軸變換為ax.transAxesax.text(0, .2, label, fontweight="bold", color=color,ha="left", va="center", transform=ax.transAxes)
# 在每個分面上調用label函數
g.map(label, "x")
# 調整子圖之間的間距
g.fig.subplots_adjust(hspace=-.5)
# 設置標題為空
g.set_titles("")
# 設置y軸刻度為空
g.set(yticks=[])
# 去掉底部和左邊的邊框
g.despine(bottom=True, left=True)

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

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

相關文章

DDD+WebAPI實戰

DDD+WebAPI實戰 DDD(領域驅動設計,Domain-Driven Design)是一種面向對象的設計方法,它強調將業務邏輯封裝在模型中,并通過這些模型來驅動整個應用的設計。在.NET環境中,特別是在使用ASP.NET Core和Web API構建應用時,DDD可以幫助我們更好地組織代碼,使得業務邏輯更加清…

人力資源管理的思維方法學習筆記1

北京師范大學政府管理學院1.課程介紹: 講述視角上,本課程側重人力資源管理的思維方式,即人力資源管理理論和時間的不同視角和主導范式的分析。這既是對人力資源管理理論發展的凝練,也是對人力資源管理實踐演進過程的總結。對于把握…

適應新環境:Trae編輯器下的IDEA快捷鍵定制

介紹:學習如何在Trae編輯器中配置IntelliJ IDEA風格的快捷鍵,減少開發環境間的切換成本,提升編碼效率。通過安裝插件或手動調整,讓你更快適應新工具大家好,我是凱哥Java本文標簽:代碼編輯效率、Trae快捷鍵、…

基于YOLO8的汽車碰撞事故檢測系統【數據集+源碼+文章】

基于YOLOv8和Streamlit的汽車碰撞事故檢測系統 文末附下載地址 開發目的 隨著城市化進程的加快和機動車保有量的持續攀升,道路交通安全問題日益突出,汽車碰撞事故頻發不僅嚴重威脅駕乘人員的生命安全,也對公共秩序、應急響應效率及交通管理…

Unity FARO 測量臂:從零構建實時數字孿生系統

前言:當精準測量遇見實時渲染 在高端制造、質量檢測和逆向工程領域,法奧 (FARO) 測量臂是精準的代名詞。它能以亞毫米級的精度捕捉現實世界中的三維坐標。現在,想象一下,如果我們將這種精度與 Unity 的強大實時渲染能力結合起來,會發生什么? 我們將得到一個數字孿生 (D…

延遲 隊列

概念 延遲隊列顧名思義就是消息不立即發送給消費者消費,而是延遲一段時間再交給消費者。 RabbitMQ本身沒有直接支持延遲隊列的的功能,但是可以通過前面所介紹的TTL死信隊列的方式組合 模擬出延遲隊列的功能. RabbitMQ 有些版本還支持延遲隊列的插件安…

Windows+Docker一鍵部署CozeStudio私有化,保姆級

在 ?Windows環境? 下,通過docker,使用 ?火山引擎Doubao-Seed-1.6模型,面向 ?小白新手? 的 ?Coze Studio私有化部署詳細步驟。整個過程分為四大階段,包含每一步的指令、成功標志。 Coze Studio 私有化部署指南(W…

【HEMCO Reference Guide 參考指南第二期】配置文件的結構和語法

配置文件的結構和語法 HEMCO 配置文件的結構和語法(The HEMCO configuration file) 1. Settings(設置) 2. Extension Switches(擴展模塊開關) 3. Base Emissions(基礎排放配置) 4. Scale Factors(縮放因子) 5. Masks(掩膜區域) 6. Data Collections(數據集合) 參…

01.單例模式基類模塊

一、單例模式的構成1、私有的靜態成員變量2、公共的靜態成員屬性或方法3、私有構造函數using System.Collections; using System.Collections.Generic; using UnityEngine;public class BaseManager : MonoBehaviour {void Start(){}// Update is called once per framevoid Up…

[網絡入侵AI檢測] 深度前饋神經網絡(DNN)模型

第4章:深度前饋神經網絡(DNN)模型 歡迎回來🐻??? 在第1章:分類任務配置(二分類 vs. 多分類)中,我們學習了如何配置模型以回答不同類型的問題;在第2章:數…

【目錄-多選】鴻蒙HarmonyOS開發者基礎

All look at the answer 針對包含文本元素的組件,例如Text、Button、TextInput等,可以使用下列哪些屬性關于ForEach(arr, itemGenerator, index)組件的描述正確的是下面哪些容器組件是可以滾動的關于Tabs組件和TabContent組件,下列描述正確的…

第一講 Vscode+Python+anaconda 安裝

1、vscode下載和安裝官網下載最新版:https://code.visualstudio.com/Download注:文件夾最好不要出現中文和空格 2、將vscode修改為中文環境注意:右下角彈出提示框,點擊“yes”若不慎關閉了對話框,也不要緊,…

《sklearn機器學習——回歸指標2》

均方對數誤差(mean_squared_log_error函數) mean_squared_log_error函數計算與平方(二次方)對數誤差或損失的期望值相一致的風險指標。 Mean Squared Logarithmic Error 參數與返回值 函數簡介 mean_squared_log_error 是用于計算…

當電力設計遇上AI:良策金寶AI如何重構行業效率邊界?

在工程設計行業,我們常說“經驗為王”。一個資深工程師的價值,往往體現在他對規范的熟悉、對計算的把握、對圖紙的掌控。但今天,這個“王座”正在被重新定義。不是經驗不重要了,而是——效率的邊界,正在被AI重構。以良…

【深度學習】重采樣(Resampling)

在深度學習的背景下,重采樣主要涉及兩個方面: 數據層面的重采樣:處理不平衡數據集。模型層面的重采樣:在神經網絡內部進行上采樣(UpSampling)或下采樣(DownSampling),常見…

計算機實現乘法運算的方式---ChatGPT 5 thinking作答

計算機如何實現“乘法” 下面分層次把乘法在數據表示 → 整數硬件/軟件 → 大整數 → 浮點數 → 特殊場景里的主流實現方式講清楚,并給出取舍建議與簡單偽代碼。0)前置:數的表示 無符號整數:按二進制位權求值。有符號整數&#xf…

Ubuntu 安裝 / 配置 VNC

一、基礎環境準備 1. 更新 sudo apt update 2. 安裝 VNC 服務器 & 輕量桌面(XFCE) # 安裝 TightVNC 服務器 + XFCE 桌面(推薦輕量方案) sudo apt install tightvncserver xfce4 xfce4-goodies xterm -y二、核心配置:讓 VNC 加載桌面環境 1. 初始化 VNC 密碼(首次…

計算機大數據畢業設計推薦:基于Spark的新能源汽車保有量可視化分析系統

精彩專欄推薦訂閱:在下方主頁👇🏻👇🏻👇🏻👇🏻 💖🔥作者主頁:計算機畢設木哥🔥 💖 文章目錄 一、項目介紹二、…

Android Looper源碼閱讀

看下Android Looper源代碼,有助于理解Android系統消息循環流程、handler機制。Looper注釋為class used to run a message loop for a thread, 即用于為一個線程運行消息循環, 或者說循環處理一個線程的消息。 Looper源碼先看下這個類里的變量…

uni-app 和 uni-app x 的區別

差異解析 uni-app 是 DCloud 推出的成熟跨平臺前端框架,基于 Vue.js JavaScript/TypeScript。支持廣泛平臺:iOS、Android、HarmonyOS、Web、小程序等,用一套代碼同時生成多個端應用。渲染方式主要通過 WebView 或小程序原生框架 JS 邏輯&am…