Seaborn第三方繪圖
關係型繪圖
Seaborn介紹
Seaborn是一個基於matplotlib且數據結構與pandas統一的統計圖製作庫。他提前已經定義好了一套自己的風格。然後也封裝了一系列的方便的繪圖函數,之前通過matplotlib
需要很大代碼才能完成繪圖,使用seaborn
可能是一行代碼的事情。
Seaborn是基於matplotlib的Python數據可視化庫。它提供了用於繪製引人入勝且內容豐富的統計圖形的高級界面。
Seaborn的繪圖
- 關係型繪圖
- 分類型繪圖
- 分佈型繪圖
- 線性繪圖
Seaborn安裝
pip install seaborn
學習文檔
- 官網 :http://seaborn.pydata.org/
- 中文學習文檔 :https://www.cntofu.com/book/172/docs/1.md
- 數據集地址 :https://github.com/mwaskom/seaborn-data
關係型繪圖
這個函數功能非常強大,可以用來表示多個變量之間的關聯關係。默認情況下是繪製散點圖,也可以繪製線性圖,具體繪製什麼圖形是通過seaborn.relplot(kind=None)
裏面的kind
參數來決定的。實際上以下兩個函數就是relplot
的特徵:
- 散點類型 :scatterplot - relplot(kind=“scatter”)
- 線性類型 : lineplot - relplot(kind=“line”)
seaborn.relplot(x=None,y=None,data=None,hue=None,col=None, row=None,kind=None,style=None)
- x : 爲x軸的數據
- y : 爲y軸的數據
- data : 爲數據集,當傳入了x,y之後還需要傳入data數據
- hue : 將該數據進行分組並展示不同的顏色,並會自動添加上圖例
- col,row : 爲列名,則根據列的類別展示數據(該列的值有多少種,則將圖以多少列顯示)
- kind : 爲設置繪製的圖形
- style : 爲指定樣式
# sns 爲網上固定的寫法,按照官網的標準
# seaborn 是基於matplotlib的封裝
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
# 讀取csv文件
df = pd.read_csv('seaborn-data-master/tips.csv')
# relplot 默認情況下繪製散點圖
sns.relplot(x='total_bill',y='tip',data=df,hue='day',col='time',row='sex')
# 爲什麼可以使用plt.show來釋放,因爲seaborn也是基於matplotlib來實現
plt.show()
散點圖
sns.scatterplot(x=None,y=None,hue=None,data=None)
- x : 爲x軸數據
- y : 爲y軸數據
- hue : 將數據進行不同顏色的分組
- data : 傳入的數據集
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df = pd.read_csv('seaborn-data-master/tips.csv')
sns.scatterplot(x='total_bill',y='tip',data=df,hue='day')
plt.show()
折線圖
繪製折線圖方法一
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df = pd.read_csv('seaborn-data-master/fmri.csv')
# kind 爲指定繪製的圖形
sns.relplot(x='timepoint', y='signal',data=df,kind='line',hue='region')
plt.show()
- 指定參數
col = event
繪製折線圖的方法二
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df = pd.read_csv('seaborn-data-master/fmri.csv')
sns.lineplot(x='timepoint', y='signal',data=df,hue='region',style='event')
# 展示圖例
plt.show()
relplot 與 lineplot或scatterplot 的區別
- 無kind參數
- 無col參數
分類繪製
分類圖的繪製,採用的是sns.catplot來實現的。cat
是categroy
的簡寫。這個方法默認繪製的分類散點圖,如果想要繪製其他類型的圖,同樣也是可以通過kind
參數來指定。
圖形的分類
- 分類散點圖
- 分類分佈圖
- 分類統計圖
seaborn.replot 與 seaborn.catplot
seaborn.replot
- 用於將關係圖繪製到FacetGrid上的圖形級界面。
- 此功能提供對幾個不同軸級功能的訪問,這些功能通過子集的語義映射顯示兩個變量之間的關係。該
kind
參數選擇要使用的基礎軸級功能:scatterplot()
(帶有kind="scatter"
;默認值)lineplot()
(帶有kind=line
)
seaborm.catplot
-
seaborn.catplot 是一個將分類圖繪製到FacetGrid上圖級別接口。
-
這個函數可以訪問多個軸級功能,這些軸級功能通過不同的可視化圖表展示數字和一個或多個分類變量的關係。
kind
參數可以選擇的軸級基礎函數有:分類散點圖
stripplot()
(帶有kind="strip"
;默認值)swarmplot()
(帶有kind="swarm"
)
分類分佈圖
boxplot()
(帶有kind="box"
)violineplot()
(帶有kind="violin"
)boxenplt()
(帶有kind="boxen"
)
分類估計圖
pointplot()
(帶有kind="point"
)barplot()
(帶有kind="bar"
)countplot()
(帶有kind="count"
)
分類圖的繪製
sns.catplot(x=None,y=None,data=None,row=None,col=None,kind=‘strip’)
- x : 爲x軸數據
- y : 爲y軸數據
- data : 數據集
- row,col : data中的變量,分類變量將決定網格的分面
- kind : 默認爲strip分類散點圖 (選項包括:“點”,“條形”,“條形”,“羣”,“框”,“小提琴”或“盒子”)。
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
df = pd.read_csv('seaborn-data-master/tips.csv')
# 日期 與 total_bill 之間的關係
sns.catplot(x='day',y='total_bill',data=df,hue='sex')
分類散點圖
sns.stripplot(x=None,y=None,data=None,hue=None)
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
df = pd.read_csv('seaborn-data-master/tips.csv')
sns.catplot(x='day',y='total_bill',data=df,hue='sex')
分簇散點圖
sns.swarpmply(x=None,y=None,hue=None,data=None)
sns.swarmplot(x='day',y='total_bill',data=df,hue='sex')
plt.show()
分類分佈圖
分類分佈圖,主要是根據分類來看,然後再每個分類下數據的分佈情況。也是通過catplot
來實現,以下三個方法分別是不同的kind
參數
- 箱型圖 :boxplot() (with kind=“box”)
- 小提琴圖 : violinplot() (with kind=“violin”)
箱型圖
boxplot(x=None,y=None,data=None, palette=None,hue=None)
- x,y : DataFrame中的列名
- data : DataFrame的數據
- palette : 調色板
- hue : DataFrame的列名,按照列名中的值分類的條形圖
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df = pd.read_csv('athlete_events.csv')
countries = {
'CHN':'中國',
'JPN':'日本',
'KOR':'日本',
'USA':'美國',
'CAN':'加拿大',
'BRA':'巴西',
'GBR':'英國',
'FRA':'法國',
'ITA':'意大利',
'ETH':'埃塞俄比亞',
'KEN':'肯尼亞',
'NIG':'尼日利亞'
}
# 判斷在countries國家的數據
# 判斷國家在countries中則選擇出來
# isin判斷值是否在countries當中
# 布爾索引篩選出數據
my_ath = df[df['NOC'].isin(list(countries.keys()))]
# 繪製箱型圖
plt.figure(figsize=(16,8))
sns.boxplot(x='NOC',y='Height',data=my_ath)
plt.show()
小提琴圖
violinplot(x=None,y=None,data=None,inner=None)
- x,y : DataFrame中的列名
- data : DataFrame的數據
- inner : 參數選擇{“box”, “quartile”, “point”, “stick”, None}
- inner : 控制小提琴圖內部數據點的表示。若爲
box
,則繪製一個微型箱型圖。若爲quartiles
,則顯示四分位數線。若爲point
或stick
,則顯示具體數據點或數據線。使用None
則繪製不加修飾的小提琴圖。
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
# 讀取數據
tips = pd.read_csv('seaborn-data-master/tips.csv')
# 繪製小提琴圖
# 中間 默認箱型圖 inner-->quartile 四分位數
sns.violinplot(x='day',y='total_bill',inner="quartile",data=tips,hue='sex')
plt.show()
分類統計圖
分類統計圖,則是根據分類,統計每個分類下的數據的個數或者比例。
- 條形圖 :
barplot() (with kind="bar")
- 柱狀圖 :
countplot() (with kind="count")
- 點線圖 :
pointplot() (with kind="point")
將點估計和置信區間顯示爲矩形條
seaborn
中的條線圖具有統計功能,可以統計出比例,平均數,也可以按照你想要的統計函數來統計。
import seaborn as sns
import pandas as pd
import numpy as np
# 直觀體現 total_bill 與 day 的統計平均數
tips = pd.read_csv('seaborn-data-master/tips.csv')
tips.head()
# 黑線 置信區間 線條越高 說明數據是比較離散的
# 默認情況下是採用平均數來進行
# estimator : 默認情況下采用平均數,我們可以指定爲sum來查看數值
sns.catplot(x='day',y='total_bill',data=tips,kind='bar',estimator=sum)
plt.show()
分析泰坦尼克號獲救的男女比例
titanic = pd.read_csv('seaborn-data-master/titanic.csv')
titanic.head()
# 繪製直方圖查看數據
# survived : 代表着獲救的人數
# 可通過estimator來指定人數
sns.catplot(x='sex',y='survived',data=titanic,kind='bar',estimator=sum)
plt.show()
使用條形圖顯示每個分類箱中的觀測值
titanic.head()
# count :代表爲單個分類中顯示值的個數
# kind = 'count' :
# 當爲count的時候,只能指定x或y單個值
sns.catplot(x='sex',data=titanic,kind='count')
使用散點圖字形顯示點估計和置信區間
# 艙爲 與 營救男女獲救關係
# hue分組
# class 爲艙位
sns.catplot(x='sex',y='survived',data=titanic,kind='point',hue='class')
分佈繪圖
分佈繪圖主要分爲單變量分佈以及二變量分佈和pairplot
單變量分佈
單一變量主要就是通過直方圖來繪製。在seaborn
中直方圖的繪製採用的是distplot
,其中dist
是distribution
的簡寫,不是histogram
的簡寫。
seaborn.distplot(a,bins=None,kde=True,hist=True,rug=False)
- a : Series 、一維數組或者列表
- bins : (參數值)直方圖bins(柱)的數目,若填None,則默認使用Freedman-Diaconis規則指定柱的數目
- hist : (布爾值)是否繪製標準化直方圖
- kde : (布爾值)是否繪製核密度線
- rug : (布爾值) 是否在橫線上繪製觀測值豎線
# 傳入一維的數組
plt.figure(figsize=(20,8),dpi=80)
sns.distplot(titanic['age'])
plt.show()
# 傳入一維的數組
plt.figure(figsize=(20,8),dpi=80)
# 當不繪製直方圖時,指定hits
# 當繪製直方圖,不繪製高密度曲線時 ,指定kde
sns.distplot(titanic['age'],bins=30,hist=False)
plt.show()
# 傳入一維的數組
plt.figure(figsize=(20,8),dpi=80)
# 當不繪製直方圖時,指定hits
# 當繪製直方圖,不繪製高密度曲線時 ,指定kde
sns.distplot(titanic['age'],bins=30,hist=True,kde=False)
plt.show()
# 傳入一維的數組
plt.figure(figsize=(20,8),dpi=80)
# 當不繪製直方圖時,指定hits
# 當繪製直方圖,不繪製高密度曲線時 ,指定kde
sns.distplot(titanic['age'],bins=30,hist=True,kde=False,rug=True)
plt.show()
二變量分佈
多變量分佈圖可以看出兩個變量之間的分佈關係。一般都是採用多個圖進行表示。多變量分佈圖採用的函數是jointplot
。
seaborn.jointplot(x,y,data=None,kind=‘scatter’, color=None,height=5,ratio=5,space=0.2,dropna=True)
- x,y,data : 繪製圖的數據
- kind :
scatter
、reg
、resid
、kde
、hex
- color : 繪製元素的顏色
- height : 圖的大小,圖會是一個正方形
- ratio : 主圖和副圖的比例,只能爲一個整型
- space : 主圖與副圖的間距。
- dropna : 是否需要刪除x或者y值出現了nan的值
# 多變量繪圖
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
# 讀取數據
tips =pd.read_csv('seaborn-data-master/tips.csv')
sns.jointplot(x='total_bill',y='tip',data=tips,height=6)
添加回歸和核密度擬合
sns.jointplot(x='total_bill',y='tip',data=tips,height=6,kind='reg')
使用六邊形箱將散點圖替換爲聯合直方圖
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
ath_data = pd.read_csv('athlete_events.csv')
# 篩選出NOC爲中國數據進行比較身高數據
ath_china = ath_data[ath_data['NOC']=='CHN']
# grisize : 指定六邊形的大小
# 數據對比 :中國的體重和身高集中圖
sns.jointplot(x='Height',y='Weight',data=ath_china,kind='hex',gridsize=20,height=7)
# grisize : 指定六邊形的大小
# 數據對比 :中國的體重和身高集中圖
# kind='hex':代表爲六邊形
# gridsize : 爲六邊形的大小
# height : 圖片大小
# color : 爲顏色
# ration : 爲子圖的大小
# marginal_kws : 繪圖組件的其他參數位置
# rug : rug越密集顯示的數據越多
# kde : 核密度曲線
sns.jointplot(x='Height',y='Weight',data=ath_china,kind='hex',gridsize=20,height=7,color='r',ratio=2,marginal_kws={'rug':True,'kde':True})
在數據集中繪製成對關係
seaborn.pairplot(data,hue=None,vars=None)
- data : 數據
- hue : 字符串變量名
- vars : 變量名列表
默認情況下,此函數將創建一個軸網格,以便每個變量在data
單行的y軸和單列的x軸上共享。對角軸的處理方式有所不同,繪製了一個圖以顯示該列中變量的數據的單變量分佈。
也可以顯示變量的子集或行和列上繪製不同的變量
import pandas as pd
import numpy as np
import seaborn as sns
# 讀取畫的數據
iris = pd.read_csv('seaborn-data-master/iris.csv')
iris.head()
# 繪製成對關係圖
sns.pairplot(iris)
當指定數據集
sns.pairplot(vars=['sepal_length','sepal_width'],data=iris)
對單變量使用核密度估計
sns.pairplot(vars=['sepal_length','sepal_width'],data=iris,diag_kind='kde')