Seaborn——繪制統計圖形

文章目錄

  • 可視化數據的分布
    • 繪制單變量分布
    • 繪制雙變量分布
    • 繪制成對的雙變量分布
  • 用分類數據繪圖
    • 類別散點圖
      • 通過stripplot()函數畫散點圖
      • swarmplot()函數
    • 類別內的數據分布
      • 繪制箱型圖
      • 繪制提琴圖
    • 類別內的統計估計
      • 繪制條形圖
      • 繪制點圖


可視化數據的分布

繪制單變量分布

一般采用最簡單的直方圖描述單變量的分布情況。Seaborn中提供了displot()函數。

distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None,
hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None,
color=None, vertical=False, norm_hist=False, axlabel=None,
label=None, ax=None)

上述函數中常用的參數含義如下:

  1. a:表示要觀察的數據,可以是Sries、一維數組或列表
  2. bins:用于控制條形的數量
  3. hist:接收布爾類型,表示是否繪制(標注)直方圖
  4. kde:接收布爾類型,表示是否繪制高斯核密度估計曲線
  5. rug:接收布爾類型,表示是否在支持的軸的方向上繪制rugplot

通過distplot()函數繪制直方圖:

import seaborn as sns
import numpy as npsns.set()  # 顯式調用set()獲取默認繪圖
np.random.seed(0)  # 確定隨機數生成器的種子
arr = np.random.randn(100)  # 生成隨機數組
ax = sns.distplot(arr, bins=10)  # 繪制直方圖

輸出結果:
在這里插入圖片描述

由圖可得,直方圖共有10個條柱,每個條柱的顏色為藍色,并且擁有核密度估計曲線。核密度估計是在概率論中用來估計未知的密度函數,屬于非參數檢驗方法之一,可以比較直觀地看出數據樣本本身的分布特征。


如果想要僅擁有核密度估計曲線,設置相關參數即可:

arr_random = np.random.randint(0, 100, 500)  # 繪制包含500個位于[0, 100)之間的隨機整數數組
sns. distplot(arr_random, hist=False, rug=True)  # 繪制核密度估計曲線

輸出結果:

繪制一條核密度估計曲線,并且在x軸的上方生成了觀測數值的小細條。
在這里插入圖片描述

注意:如果希望Seaborn用Matplotlib的默認樣式,之前可以通過從Seaborn庫中導入apionly模塊解決這個問題,但是從2017年7月起這個方法已經被棄用了。因此,現在導入Seaborn時,需要顯式地調用set()或set_style()、set_context()和set_palette()中的一個或多個函數,以獲取Seaborn或者Matplotlib默認的繪圖樣式。

擬合并繪制核密度估計曲線還可以使用kedeplot()函數


繪制雙變量分布

兩個變量的二元分布可視化可以顯示兩個變量之間的雙變量關系以及每個變量在單獨坐標軸上的單變量分布。

jointplot(x, y, data=None, kind=“scatter”, stat_func=None,
color=None, height=6, ratio=5, space=.2,
dropna=True, xlim=None, ylim=None,
joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)

上述函數中常用參數的含義如下:

  1. kind:表示繪制圖形的類型
  2. stat_func:用于計算有關關系的統計量并標注圖
  3. size:用于設置圖的大小(正方形)
  4. ratio:表示中心圖與側邊圖的比例。該參數的值越大,則中心圖的占比會越大。
  5. space:用于設置中心圖與側邊圖的間隔大小。
  6. xlim,ylim:表示x、y軸的范圍。

繪制散點圖:

dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})  # 創建DataFrame對象
sns.jointplot(x="x", y='y', data=dataframe_obj)  # 繪制散點圖

輸出結果:

x軸的名稱為“x”,y軸的名稱為“y”,兩軸的數據均為500個隨機數。可以看到的是散點圖的上方和右側增加了直方圖,便于觀察x和y軸數據的整體分布情況,并且它們的均值都是0。
在這里插入圖片描述


繪制二維直方圖:

dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})  # 創建DataFrame對象
sns.jointplot(kind='hex', data=dataframe_obj, x='x', y='y')  # 繪制二維直方圖

輸出結果:

從六邊形顏色的深淺,可以觀察到數據密集的程度,圖形的上方和右側依然給出了直方圖。

注意: 繪制二維直方圖時最好是用白色背景以便觀察六邊形顏色深淺。
在這里插入圖片描述


繪制核密度估計圖形:

利用核密度估計同樣可以查看二元分布,Seaborn中用等高線圖來表示。

sns.jointplot(kind='kde', x='x', y='y', data=dataframe_obj)  # 繪制核密度估計圖形

輸出結果:

繪制了核密度的等高線圖,通過觀察等高線的顏色深淺,可以看出哪個范圍的數值分布的最多,哪個范圍的數值分布的最少。同樣的,在圖形的上方和右側給出了核密度曲線圖。
在這里插入圖片描述


繪制成對的雙變量分布

要想在數據集中繪制成對的雙變量分布,則可以使用pairplot()函數實現,該函數會創建一個坐標軸矩陣,并顯示DataFrame對象中每對變量的關系。該函數亦可繪制每個變量在對角軸上的單變量分布。

代碼如下:

通過load_dataset()函數加載了seaborn中內置的數據集,根據tips數據集繪制多個雙變量分布。【如無法正確運行,則在這里下載zip文件,然后在電腦中,使用搜索功能找到seaborn-data文件夾,將zip文件解壓到文件夾中,具體步驟如下圖:】
在這里插入圖片描述

在這里插入圖片描述

dataset = sns.load_dataset("tips")  # 加載seaborn中的數據集
sns.pairplot(dataset)  # 繪制多個成對的雙變量分布

輸出結果:
在這里插入圖片描述


用分類數據繪圖

類別散點圖

stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
jitter=True, dodge=False, orient=None, color=None, palette=None,
size=5, edgecolor=“gray”, linewidth=0, ax=None, **kwargs)

上述函數中常用參數如下:

  1. x,y,hue:用于繪制長葛市數據的輸入。
  2. data:用于繪制的數據集。如果x和y不存在,則它將作為寬格式,否則將作為長格式。
  3. order,hue_order:用于繪制分類的級別。
  4. jitteer:表示抖動的程度(僅沿類別軸)。當很多數據點重疊時,可以指定抖動的數量,或者設為True使用默認值。

通過stripplot()函數畫散點圖

代碼如下:

tips = sns.load_dataset("tips")
sns.stripplot(x='day', y='total_bill', data=tips)

輸出結果:

從圖中可以看出,圖標橫坐標時分類的數據,而且一些數據點會互相重疊,不易于觀察。可以在調用stripplot()函數時傳入jitter參數,以調整橫坐標的位置。
在這里插入圖片描述


改變橫坐標的位置:

tips = sns.load_dataset("tips")
sns.stripplot(x='day', y='total_bill', data=tips, jitter=True)

輸出結果:
在這里插入圖片描述


swarmplot()函數

亦可使用swarmplot()函數繪制散點圖,該函數的好處是所有的數據點都不會重疊,可以很清晰地觀察到數據的分布情況。

代碼如下:

tips = sns.load_dataset("tips")
sns.swarmplot(x='day', y='total_bill', data=tips)

輸出結果:
在這里插入圖片描述


類別內的數據分布

由于散點圖查看各個分類中的數據分布不夠直觀,故可利用下列兩種圖形查看:

  1. 箱型圖:直觀地查看數據的四分位分布(1/4分位,中位數,3/4分位以及四分位距)
  2. 提琴圖:箱型圖與核密度圖地的結合,可以展示任意位置的密度,可以很直觀地看到哪些位置的密度較高

繪制箱型圖

boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
orient=None, color=None, palette=None, saturation=.75,
width=.8, dodge=True, fliersize=5, linewidth=None,
whis=1.5, ax=None, **kwargs)

上述函數常用參數如下:

  1. orient:表示數據垂直或水平顯示,取值為“v”|“h”
  2. palette:用于設置不同級別色相的顏色變量。
  3. saturation:用于設置數據顯示的顏色飽和度。

代碼如下:

tips = sns.load_dataset("tips")
sns.boxplot(x='day', y='total_bill', data=tips)

輸出結果:

x軸的名稱為day,刻度范圍是Thur ~ Sun(周四至周日),y軸的名稱為total_bill,刻度范圍為10 ~ 50左右。
在這里插入圖片描述
從圖中可以看出,Thur列、Fri列中大部分數據都小于30,但Thur列有5個異常值大于30、Fri列中有1個異常值大于40;Sat列中有3個大于40的異常值;Sun列中有兩個大于40的異常值。


繪制提琴圖

violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
bw=“scott”, cut=2, scale=“area”, scale_hue=True, gridsize=100,
width=.8, inner=“box”, split=False, dodge=True, orient=None,
linewidth=None, color=None, palette=None, saturation=.75,
ax=None, **kwargs)

代碼如下:

tips = sns.load_dataset("tips")
sns.violinplot(x='day', y='total_bill', data=tips)

輸出結果:

由圖可得,Thur列中位于5 ~ 25之間的數值較多,Fri列中位于5 ~ 30之間的數值較多,Sat列中位于5 ~ 35之間的數值較多,Sun列中位于5 ~ 40之間的數值較多。
在這里插入圖片描述


類別內的統計估計

想要集中查看每個分類的集中趨勢可以使用條形圖和點圖進行展示。

  1. barplot()函數:繪制條形圖
  2. pointplot()函數:繪制點圖。

繪制條形圖

默認情況下, barplot()函數會在整個數據集上使用均值進行估計。若每個類別中有多個類別時(使用了hue參數),則條形圖可以使用引導來計算估計的置信區間(樣本統計量構造的總體參數的估計區間),并使用誤差條來表示置信區間。

代碼如下:

tips = sns.load_dataset("tips")
sns.barplot(x='day', y='total_bill', data=tips)  # 繪制條形圖

輸出結果:
在這里插入圖片描述


繪制點圖

該函數會用高度估計值對數據進行描述,而不是顯示完整的條形,只繪制點估計和置信區間。

代碼如下:

tips = sns.load_dataset("tips")
sns.pointplot(x='day', y='total_bill', data=tips)  # 繪制點圖

輸出結果:
在這里插入圖片描述

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

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

相關文章

Bokeh——交互式可視化庫

文章目錄前言如何通過Plotting繪制圖形前言 Bokeh是一個專門針對Web瀏覽器使用的交互式可視化庫,這是與其他可視化庫相比最核心的區別。 如何通過Plotting繪制圖形 Plotting是以構建視覺符號為核心的接口,可以結合各種視覺元素(例如&#x…

指針、引用以及const限定符、constexpr限定符

文章目錄復合類型引用概念與使用引用的定義注意指針概念聲明方式取地址符指針值空指針利用指針訪問對象賦值和指針void* 指針指向指針的指針指向指針的引用初始化所有指針有多重含義的某些符號const限定符概念const的引用指針和const頂層const和底層constconstexpr和常量表達式…

關鍵字typedef、關鍵字using、auto類型說明符和declytpe類型指示符

文章目錄類型別名概念關鍵字 typedef別名聲明 (alias declaration) using指針、常量和類型別名類型別名簡化多維數組指針auto類型說明符概念復合類型、常量和autodecltype類型指示符概念decltype和引用類型別名 概念 有兩種方法可用于定義類型別名。 關鍵字 typedef typede…

初始化、賦值、默認初始化、列表初始化、類內初始值、直接初始化與拷貝初始化

文章目錄初始化和賦值的區別什么是默認初始化?列表初始化列表初始化的使用場景不適合使用列表初始化的場景類內初始值混用string對象和C風格字符串數組與vector對象關于vector對象兩者間的初始化關系直接初始化與拷貝初始化初始化和賦值的區別 初始化的含義是創建變…

js動態增加,刪除td,tr,table,div

js實現的動態添加,刪除table內容: 截圖如下: 1. 2. 源代碼: main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

string類的相關知識及部分操作

文章目錄string對象的初始化string::size_type類型string對象的讀寫操作使用標準庫中的iostream使用getline讀取一整行string對象的比較操作string對象的相加操作兩個string對象相加字面值和string對象相加string對象的初始化 拷貝初始化(copy initialization):使用…

數組的部分練習

3.27:假設txt_size是一個無參數的函數,它的返回值是int。請回答下列哪個定義是非法的?為什么? unsigned buf_size1024; (a)int ia[buf_size];  (b)int ia[4*7-14]; &#xff08…

關于范圍for語句的使用

文章目錄使用范圍for語句處理多維數組使用范圍for語句處理多維數組 舉個例子&#xff0c;使用范圍for語句輸出多維數組&#xff08;ia&#xff09;所有值&#xff1a; for (const auto &row : ia)for (auto col : row)cout << col << endl;本循環中并沒有任何…

vector的應用練習

文章目錄編寫一段程序&#xff0c;使用條件運算符從vector< int >中找出哪些元素的值是奇數&#xff0c;然后將奇數值翻倍。 #include <iostream> #include <ctime> #include <vector> using namespace std; typedef int int_array[4]; int main() {v…

sizeof運算符運算結果小匯

文章目錄sizeof運算符的結果部分地依賴于其作用的類型sizeof運算符的結果部分地依賴于其作用的類型 對char或者類型為char的表達式執行sizeof運算&#xff0c;結果得1對引用類型執行sizeof運算得到被引用對象所占空間的大小對指針執行sizeof運算得到指針本身所占空間的大小對解…

jQuery實現復選框的全選和反選:

jQuery實現復選框的全選和反選&#xff1a; 截圖如下&#xff1a; 代碼如下&#xff1a; index.jsp: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath…

C語言隱式/顯式類型轉換 | C++四種強制類型轉換、類的隱式轉換、explicit

文章目錄C語言類型轉換隱式類型轉換顯式類型轉換C 強制類型轉換static_castreinterpret_castconst_castdynamic_cast類的隱式類型轉換概念只允許一步類類型轉換explicit 抑制構造函數定義地隱式轉換可以通過顯式轉換使用explicit構造函數C語言類型轉換 隱式類型轉換 編譯器在…

string對象和C風格字符串

混用string對象和C風格字符串 我們都知道允許使用字符串字面值來初始化string對象&#xff1a; string s("Hello World!");C規定&#xff0c;任何出現字符串字面值的地方都可以用以空字符結束的字符數組來替代&#xff1a; 允許使用以空字符結束的字符數組來初始化…

函數重載、引用再探、內聯函數

文章目錄函數重載為什么C支持重載&#xff0c;C語言不支持呢&#xff1f;extern “C”引用再探引用的特性引用的使用場景引用和指針引用和指針的不同點:內聯函數什么是內聯函數&#xff1f;內聯函數的特性內聯函數的好處類的內聯成員函數的聲明內聯函數的使用constexpr函數概念…

類的概念、成員函數的定義方式、類的訪問控制和封裝、類的大小、this指針

文章目錄類的概念structclassclass和struct的區別是什么呢&#xff1f;類中成員函數的兩種定義方式聲明和定義都在類中聲明和定義分離類的訪問控制和封裝類的封裝特性類的大小結構體內存對齊規則類的存儲方式this指針類的概念 在C中&#xff0c;類可以說是最重要的東西&#x…

jQuery實現兩個列表框的值之間的互換:

jQuery實現兩個列表框的值之間的互換&#xff1a; 截圖如下&#xff1a; 代碼如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath reque…

類的6個默認成員函數:構造函數、析構函數、拷貝構造函數、重載運算符、三/五法則

文章目錄6個默認成員函數構造函數概念默認構造函數的類型默認實參概念默認實參的使用默認實參聲明全局變量作為默認實參某些類不能依賴于編譯器合成的默認構造函數第一個原因第二個原因第三個原因構造函數初始化構造函數里面的“”是初始化嗎&#xff1f;為什么要使用列表初始化…

C++ 類的知識 | 構造函數再探、匿名對象、友元函數、內部類、類的const成員、類的static成員

文章目錄構造函數再探以下代碼共調用多少次拷貝構造函數委托構造函數概念形式匿名對象友元友元的聲明友元類令成員函數作為友元函數重載和友元注意內部類特性類的const成員可變數據成員類的static成員概念關于static靜態成員的類內初始化靜態成員能用于某些普通成員不能的場景構…

截取全部數值字符并將其轉化為數值類型

功能 從name中找出全部數值字符&#xff0c;之后將name&#xff08;string類&#xff09;轉為d&#xff08;double類&#xff09; 代碼 #include <iostream> #include <list> #include <deque> #include <vector> #include <forward_list> #i…

替換string中的部分字符

功能 向函數fun中傳入三個參數&#xff1a;將s中所有oldval替換為newval 代碼 #include <iostream> #include <list> #include <deque> #include <vector> #include <forward_list> #include <array> using namespace std;void fun(str…