seaborn常用圖形總結(jié)

?文章目錄

  • 1.Relational plots(關(guān)系圖)

  • 1.1 scatterplot(散點(diǎn)圖)

  • 1.2 lineplot(線圖)

  • 1.3 relplot(關(guān)系圖)

  • 2.Categorical plots(分類圖)

  • 2.1 Categorical scatterplots(分類散點(diǎn)圖)

  • 2.1.1 stripplot(分布散點(diǎn)圖)

  • 2.1.2 swarmplot(分布密度散點(diǎn)圖)

  • 2.2 Categorical distribution plots(分類分布圖)

  • 2.2.1 boxplot(箱線圖)

  • 2.2.2 violinplot(小提琴圖)

  • 2.2.3 violinplot+stripplot(小提琴圖+分布散點(diǎn)圖)

  • 2.2.4 violinplot+swarmplot(小提琴圖+分布密度散點(diǎn)圖)

  • 2.2.5 boxplot+stripplot(箱線圖+分布散點(diǎn)圖)

  • 2.2.6 boxplot+swarmplot(箱線圖+分布密度散點(diǎn)圖)

  • 2.3 Categorical estimate plots(分類估計(jì)圖)

  • 2.3.1 barplot(條形圖)

  • 2.3.2 countplot(計(jì)數(shù)圖)

  • 2.3.3 piontplot(點(diǎn)圖)

  • 2.3.4 catplot()

  • 3 Distribution plots(分布圖)

  • 3.1 distplot(直方圖)

  • 3.2 kdeplot(核密度圖)

  • 3.3 jointplot(聯(lián)合分布圖)

  • 3.4 pairplot(變量關(guān)系組圖)

  • 4 Regression plots(回歸圖)

  • 4.1 lmplot(回歸圖)

  • 4.2 regplot()

  • 5.Matrix plots(矩陣圖)

  • 5.1 heatmap(熱力圖)

  • 5.2 clustermap(聚類圖)

  • 6 FacetGrid()

  • 7 PairGrid()

    部分內(nèi)容來(lái)自:https://blog.csdn.net/qq_40195360/article/details/86605860

1.Relational plots(關(guān)系圖)

1.1 scatterplot(散點(diǎn)圖)

import numpy as np``import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")
# seaborn官方小費(fèi)數(shù)據(jù)
tips = sns.load_dataset("tips")
#消費(fèi)總金額和小費(fèi)金額的散點(diǎn)圖
ax = sns.scatterplot(x="total_bill", y="tip", data=tips) 
image
sns.scatterplot(    
x=None,    
y=None,    
hue=None,#hue 色彩設(shè)置分組,不同分類顏色不同    
style=None, # style 設(shè)置分組,不同分組 標(biāo)記不同   
size=None,# size 設(shè)置分組,不同分類大小不同    
data=None,    
palette=None, # palette 設(shè)置顏色 list, or dict(類似時(shí)一組配色,選了不同的配色組,出來(lái)的顏色色系不同)   
hue_order=None,# 設(shè)置圖例的順序 list 圖例為數(shù)字時(shí) 不管用    
hue_norm=None,    
sizes=None,    
size_order=None, # 設(shè)置圖例的順序 list 圖例為數(shù)字時(shí) 不管用    
size_norm=None,    
markers=True,# 標(biāo)記格式,設(shè)為True是默認(rèn)標(biāo)記,F(xiàn)alse不使用標(biāo)記  boolean, list, or dictionary    
style_order=None, # 設(shè)置圖例的順序 list 圖例為數(shù)字時(shí) 不管用    
x_bins=None,   
y_bins=None,    
units=None,    
estimator=None,    
ci=95, #Confidence interval 置信區(qū)間   
n_boot=1000,    
alpha='auto', #alpha 透明度    
x_jitter=None,    
y_jitter=None,    
legend='brief', #圖例 有三種選擇 "brief", "full", or False, optional    
ax=None,    
**kwargs,)
ax = sns.scatterplot(
x="total_bill", 
y="tip", 
hue="size",
size="size",
style='sex',
style_order=['Male','Female'], 
palette='PRGn',
data=tips)#hue 相當(dāng)于分組 即根據(jù)size 人數(shù)分組
image
ax = sns.scatterplot(x="total_bill", y="tip",
hue="day", style="time",size='size',
legend='full',data=tips)
image
tips.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4

1.2 lineplot(線圖)

sns.lineplot(``x=None,
    y=None,
    hue=None,
    size=None,
    style=None,
    data=None,
    palette=None,
    hue_order=None,
    hue_norm=None,
    sizes=None,
    size_order=None,
    size_norm=None,
    dashes=True,#設(shè)置線條格式 實(shí)線or虛線,設(shè)置False時(shí)全部是實(shí)線
    markers=None,
    style_order=None,
    units=None,
    estimator='mean',# pandas 方法,同樣X(jué)軸多個(gè)y值的聚合方法(max,min,sum,min等) none時(shí) 每個(gè)Y值的線都畫(huà)出來(lái)
    ci=95,
    n_boot=1000,
    seed=None, # 使用random時(shí)需要
    sort=True,
    err_style='band', #置信區(qū)間的格式 帶狀 或bar 條狀,條狀像是excel里面的誤差線
    err_kws=None,
    legend='brief',
    ax=None,
    **kwargs,
)
ax1=sns.lineplot(x='size',y='total_bill',hue='sex',style='smoker',\                
 err_style="band",markers=True,estimator='sum',\               
 data=tips)
image

1.3 replot 關(guān)系圖

sns.relplot(    x=None,    y=None,    hue=None,   
 size=None,    style=None,    data=None,    row=None,    
col=None,    # row,col 將確定網(wǎng)格面的分類變量 比如 不同星期N,  
  #不同性別時(shí),消費(fèi)人數(shù)和消費(fèi)金額的關(guān)系 每一行顯示同意性別 不同周N
# ,還是每一行顯示相同周N 不同性別    
col_wrap=None, # 不能和row參數(shù)一起使用。沒(méi)有row時(shí),相當(dāng)于只有col一
#個(gè)參數(shù),此時(shí)按幾列排放   
row_order=None,# 改變大網(wǎng)格的行的順序 ,順序按照列表呈現(xiàn)    
col_order=None,# 改變大網(wǎng)格的列的順序 ,順序按照列表呈現(xiàn)    
palette=None,    
hue_order=None,    
hue_norm=None,    sizes=None,    size_order=None,    
size_norm=None,    markers=None,    dashes=None,   
 style_order=None,    legend='brief',    
kind='scatter', #scatter 或者line    
height=5,#圖的高度    
aspect=1, #長(zhǎng)寬比1:1    
facet_kws=None,    **kwargs,)
sns.relplot(x="total_bill", y="tip", hue="time", size="size",\            
palette=["b", "r"], sizes=(10, 100),col='day',\            
col_order=['Sun','Sat','Fri','Thur'],height=4,aspect=1,row='smoker',\            
data=tips)# 周N 吸煙與不抽煙的人的消費(fèi)金額和給小費(fèi)的關(guān)系
<seaborn.axisgrid.FacetGrid at 0x27f0084c788>
image

2.Categorical plots(分類圖)

  • Categorical plots(分類圖)可以具體分為下面三種類型,8個(gè)小圖:
Categorical scatterplots(分類散點(diǎn)圖)
  • stripplot(分布散點(diǎn)圖)

  • swarmplot(分布密度散點(diǎn)圖)

Categorical distribution plots(分類分布圖)
  • boxplot(箱線圖)

  • violinplot(小提琴圖)

boxenplot(字母價(jià)值圖???)
Categorical estimate plots(分類估計(jì)圖)
pointplot(點(diǎn)圖)
barplot(條形圖)
countplot(計(jì)數(shù)統(tǒng)計(jì)圖)
2.1.1 stripplot
sns.stripplot(    x=None,    y=None,    hue=None,    data=None, 
   order=None,    hue_order=None,   
 jitter=True, # 抖動(dòng),F(xiàn)alse True OR 0-1之間的小數(shù),減輕數(shù)據(jù)的重疊   
dodge=False, # 有hue變量時(shí),如果dodge=False 那么不同顏色的值會(huì)混在一起,    
#如果dodge=True,那么會(huì)像條形圖一樣分開(kāi)呈現(xiàn)    
orient=None, # 橫向或豎向 'h','v',    
#這通常是根據(jù)輸入變量的dtype推斷出來(lái)的,    
#但當(dāng)變量是數(shù)字或者繪制寬格式數(shù)據(jù)時(shí),可以用來(lái)指定“分類”。    
color=None,    palette=None,    size=5,    e
dgecolor='gray',    linewidth=0,    
ax=None,    **kwargs,)
tips.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
sns.stripplot(x='day',y='tip',hue='sex',data=tips,
jitter=0.2,orient='v',dodge=False)
<matplotlib.axes._subplots.AxesSubplot at 0x27f02b8c888>
image
sns.stripplot(x='day',y='tip',hue='sex',data=tips,jitter=0.2,
orient='v',dodge=True)# 不同性別周N的小費(fèi)金額
<matplotlib.axes._subplots.AxesSubplot at 0x27f02c6ddc8>
image
sns.stripplot(x='day',y='tip',hue='sex',\              
data=tips,jitter=0.2,orient='v',\              
dodge=True,palette='CMRmap_r')
#以下是palette的可選配色參數(shù). Possible values are:
#Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r,
# BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, 
#Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, 
#PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r,
#PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, 
#Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r,
 #RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, 
#Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd,
#YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, 
#bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix,
#cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, 
#gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, 
#gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, icefire, icefire_r, 
#inferno, inferno_r, jet, jet_r, magma, magma_r, mako, mako_r, 
# nipy_spectral, nipy_spectral_r, ocean, 
#ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic, 
#seismic_r, spring, spring_r, summer, summer_r, tab10, tab10_r, 
#tab20, tab20_r, tab20b, tab20b_r, tab20c,
#tab20c_r, terrain, terrain_r, twilight, twilight_r, twilight_shifted, 
# twilight_shifted_r, viridis, viridis_r, #vlag, vlag_r, winter, winter_r
<matplotlib.axes._subplots.AxesSubplot at 0x27f045233c8>
image
2.1.2 swarmplot(分布密度散點(diǎn)圖)
  • 這個(gè)函數(shù)類似于stripplot(),但是對(duì)點(diǎn)進(jìn)行了調(diào)整(只沿著分類軸),這樣它們就不會(huì)重疊。這更好地表示了值的分布,但它不能很好地?cái)U(kuò)展到大量的觀測(cè)。
sns.swarmplot(    x=None,    y=None,    hue=None,    data=None,    order=None,    hue_order=None,    dodge=False,    orient=None,    color=None,    palette=None,    size=5,    edgecolor='gray',    linewidth=0,    ax=None,    **kwargs,)
sns.swarmplot(x='day',y='tip',hue='sex',data=tips,\              orient='v',dodge=True,palette='Set1',edgecolor='black')
<matplotlib.axes._subplots.AxesSubplot at 0x27f0526c9c8>

<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em; box-sizing: border-box !important; overflow-wrap: break-word !important;">
image

</figcaption>

<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em; box-sizing: border-box !important; overflow-wrap: break-word !important;">png</figcaption>

2.2 Categorical distribution plots(分類分布圖)

2.2.1 boxplot(箱線圖)
  • boxplot(箱線圖,又稱為盒須圖、盒式圖)便于在變量之間或跨類別變量級(jí)別比較的方式,顯示定量數(shù)據(jù)的分布情況??蝻@示數(shù)據(jù)集的四分位數(shù),線顯示分布的其余部分,它能顯示出一組數(shù)據(jù)的最大值、最小值、中位數(shù)及上下四分位數(shù)。

  • 一個(gè)矩形盒,兩端邊的位置分別對(duì)應(yīng)數(shù)據(jù)批的上下四分位數(shù)(Q3和Q1)。在矩形盒內(nèi)部中位數(shù)(Xm)位置畫(huà)一條線段為中位線。

  • 在Q3+1.5IQR和Q1-1.5IQR處畫(huà)兩條與中位線一樣的線段,這兩條線段為異常值截?cái)帱c(diǎn),稱其為內(nèi)限;在Q3+3IQR和Q1-3IQR處畫(huà)兩條線段,稱其為外限。處于內(nèi)限以外位置的點(diǎn)表示的數(shù)據(jù)都是異常值,其中在內(nèi)限與外限之間的異常值為溫和的異常值(mild outliers),在外限以外的為極端的異常值(extreme outliers)。四分位距IQR=Q3-Q1

    image
sns.boxplot(    x=None,    y=None,    hue=None,    data=None,  
  order=None,    hue_order=None,    orient=None,    color=None,   
 palette=None,    
saturation=0.75, #顏色的飽和度    
width=0.8, #箱體寬度    
dodge=True,    
fliersize=5, # 離群值的 標(biāo)記大小    
linewidth=None,    
whis=1.5, #判斷離群值 1.5倍IQR    
ax=None,    **kwargs,)
sns.boxplot(x='day',y='tip',hue='sex',\           
 width=0.5,fliersize=1.5,saturation=1.2,\         
   data=tips,dodge=True,whis=1.5)
<matplotlib.axes._subplots.AxesSubplot at 0x27f08f5a1c8>
image
2.2.2 violinplot(小提琴圖)
  • violinplot與boxplot扮演類似的角色,箱線圖展示了分位數(shù)的位置,它顯示了定量數(shù)據(jù)在一個(gè)(或多個(gè))分類變量的多個(gè)層次上的分布,這些分布可以進(jìn)行比較。

  • 與箱形圖中所有繪圖組件都對(duì)應(yīng)于實(shí)際數(shù)據(jù)點(diǎn)不同,小提琴繪圖以基礎(chǔ)分布的核密度估計(jì)為特征,通過(guò)小提琴圖可以知道哪些位置的密度較高。在圖中,白點(diǎn)是中位數(shù),黑色盒型的范圍是下四分位點(diǎn)到上四分位點(diǎn),細(xì)黑線表示須。外部形狀即為核密度估計(jì)。

  • 這是一種可以同時(shí)顯示多個(gè)數(shù)據(jù)分布的有效和有吸引力的方法,但請(qǐng)記住,估計(jì)過(guò)程受樣本大小的影響,相對(duì)較小的樣本的小提琴手看起來(lái)可能會(huì)顯得非常平滑。

sns.violinplot(    x=None,    y=None,  
  hue=None,    data=None,    order=None,   
 hue_order=None,   
 bw='scott',#  scott’, ‘silverman’, float,控制擬合程度. 在計(jì)算內(nèi)核帶寬時(shí),#     可以引用規(guī)則的名稱(‘scott’, ‘silverman’)或者使用比例(float)。#     實(shí)際內(nèi)核大小將通過(guò)將比例乘以每個(gè)bin內(nèi)數(shù)據(jù)的標(biāo)準(zhǔn)差來(lái)確定;    
cut=2,#Set to 0 to limit the violin range within the rangeof the observed data #   cut=0,have the same effect as ``trim=True`` in``ggplot``
#小提琴圖默認(rèn)的坐標(biāo)范圍是數(shù)據(jù)的最小值到最大值,
# 其扁平的尾部在這兩個(gè)位置處截?cái)唷?#通過(guò)設(shè)置trim=FALSE可以保留小提琴的尾部    
scale='area', #可選項(xiàng) {"area", "count", "width"},\    
#如果``count'',則小提琴的寬度將根據(jù)該倉(cāng)中的觀察數(shù)量進(jìn)行縮放。   
 # 如果是area或者width,那么小提琴擁有相同的面積或者相同的寬度    
scale_hue=True,#當(dāng)使用hue分類后,設(shè)置為True時(shí),此參數(shù)確定是否在主分組變量進(jìn)行縮放    
gridsize=100, #離散網(wǎng)格中用于計(jì)算核密度估計(jì)的點(diǎn)數(shù)。點(diǎn)數(shù)越高越平滑    
width=0.8,    
inner='box', 
#可選項(xiàng){"box", "quartile", "point", "stick", None}   
 # 分別表示:箱子,四分位,點(diǎn),數(shù)據(jù)線和空白    split=False, 
# True or False 是否拆分,當(dāng)設(shè)置為True時(shí),    
#繪制經(jīng)hue分類的每個(gè)級(jí)別畫(huà)出一半的小提琴 ,只能在hue分兩組用split,    
dodge=True,    
orient=None,   
 linewidth=None,    color=None,   
 palette=None,    saturation=0.75, 
 ax=None,    **kwargs,)
sns.violinplot(x='day',y='tip',scale='count',palette='autumn'\         
  ,saturation=1.2,inner='box',width=0.9,gridsize=50,\          
  data=tips,dodge=True              )
# scale='width'/'area'
<matplotlib.axes._subplots.AxesSubplot at 0x27f0afef388>
image
sns.violinplot(x='day',y='tip',hue='sex',scale='area',\         
 width=0.5,fliersize=0.5,saturation=1.2,\           
 data=tips,dodge=True,split=True,
scale_hue=True,cut=2 )
#當(dāng)將色相嵌套與需要兩個(gè)級(jí)別的變量一起使用時(shí),
#將``split''設(shè)置為True將為每個(gè)級(jí)別繪制小提琴的一半。
#這可以使直接比較分布更加容易。
# cut=0 將數(shù)據(jù)限制在觀察數(shù)據(jù)的范圍內(nèi)
<matplotlib.axes._subplots.AxesSubplot at 0x27f0b652748>
image
2.2.3 violinplot+stripplot(小提琴圖+分布散點(diǎn)圖)
ax = sns.violinplot(x="tip", y="day", data=tips, 
inner=None,whis=np.inf)
ax = sns.stripplot(x="tip", y="day", data=tips,jitter=True, color="c")
image
2.2.4 violinplot+swarmplot(小提琴圖+分布密度散點(diǎn)圖)
ax = sns.violinplot(x="tip", y="day", data=tips,
scale='width', inner=None,whis=np.inf)
ax = sns.swarmplot(x="tip", y="day", data=tips, color="c")
image
2.2.5 boxplot+stripplot(箱線圖+分布散點(diǎn)圖)
ax = sns.boxplot(x="tip", y="day", data=tips, whis=np.inf)
ax = sns.stripplot(x="tip", y="day", data=tips,jitter=True, color="c")
image
2.2.6 boxplot+swarmplot(箱線圖+分布密度散點(diǎn)圖)
ax = sns.boxplot(x="tip", y="day", data=tips, whis=np.inf)
ax = sns.swarmplot(x="tip", y="day", data=tips, color="c")
image

2.3 Categorical estimate plots(分類估計(jì)圖)

2.3.1 barplot(條形圖)
  • 條形圖表示數(shù)值變量與每個(gè)矩形高度的中心趨勢(shì)的估計(jì)值,用矩形條表示點(diǎn)估計(jì)和置信區(qū)間,并使用誤差線提供關(guān)于該估計(jì)值附近的不確定性的一些指示。具體用法如下:
sns.barplot(    x=None,    y=None,    hue=None,    data=None,    
order=None,    hue_order=None,    
estimator=<function mean at 0x0000027F6E56E798>,#默認(rèn)為mean。   
 #當(dāng)然你也可以設(shè)置estimator=np.median/np.std/np.var……    ci=95, 
#標(biāo)準(zhǔn)誤差    
n_boot=1000,#計(jì)算置信區(qū)間時(shí)要使用的引導(dǎo)程序迭代次數(shù)   
units=None,    seed=None,    orient=None,    
color=None,    palette=None,    saturation=0.75,    
errcolor='.26', #表示置信區(qū)間的線條的顏色;    
errwidth=None,#float,設(shè)置誤差條線(和帽)的厚度    
capsize=None,#設(shè)置誤差棒帽條(上下兩根橫線)的寬度,float    
dodge=True,    
ax=None,    
**kwargs,)
  • units還沒(méi)明白什么意思,可以確定的是,unit傳入的是一個(gè)列名

  • 官方解釋:可選的采樣單位標(biāo)識(shí)符,將用于執(zhí)行多級(jí)引導(dǎo)程序并考慮重復(fù)測(cè)量的設(shè)計(jì)

ax=sns.barplot(x='day',y='tip',hue='smoker',estimator=np.median,\              data=tips,palette='Set2',errwidth=0)# 聚合函數(shù)為中位數(shù)# 誤差線寬度設(shè)為0#每天吸煙與否人群小費(fèi)的中位數(shù)
image
ax=sns.barplot(x='day',y='tip',hue='sex',estimator=np.sum,\              
 capsize=0.1,\             
 data=tips,palette='Set2')
# 聚合函數(shù)為sum# 設(shè)置誤差線的頂端和底端寬度
image
2.3.2 countplot(計(jì)數(shù)圖)
  • 計(jì)數(shù)圖可以看作是分類變量而不是定量變量的直方圖。基本的API和選項(xiàng)與barflot的API和選項(xiàng)相同,因此您可以比較嵌套變量之間的計(jì)數(shù)。(工作原理就是對(duì)輸入的數(shù)據(jù)分類,條形圖顯示各個(gè)分類的數(shù)量)。

  • 在大多數(shù)情況下,可以使用numpy或Python對(duì)象,但最好使用pandas對(duì)象,因?yàn)殛P(guān)聯(lián)的名稱將用于注釋軸。此外,您可以將分類類型用于
    分組變量以控制繪圖元素的順序。

  • 即使數(shù)據(jù)具有數(shù)字或日期類型,此函數(shù)也始終將變量之一視為分類變量,并在相關(guān)軸的序數(shù)位置(0,1,… n)上繪制數(shù)據(jù)。

sns.countplot(    x=None,    y=None,    hue=None,   
 data=None,    order=None,    hue_order=None,  
  orient=None,    color=None,    palette=None,   
 saturation=0.75,    dodge=True,    
ax=None,    **kwargs,)
#不能同時(shí)輸入X值和y值
sns.countplot(x='day',hue='sex',\             
data=tips,palette='Set2')
<matplotlib.axes._subplots.AxesSubplot at 0x27f0e7be208>
image
2.3.3 piontplot(點(diǎn)圖)
  • 點(diǎn)圖通過(guò)散點(diǎn)圖的位置表示對(duì)數(shù)值變量的集中趨勢(shì)的估計(jì),并使用誤差線提供了一些圍繞該估計(jì)的不確定性的指示。

  • 在集中比較一個(gè)或多個(gè)分類變量的不同級(jí)別時(shí),點(diǎn)圖比條形圖更有用。他們特別擅長(zhǎng)顯示交互作用:一個(gè)分類變量的級(jí)別之間的關(guān)系如何在第二個(gè)分類變量的級(jí)別之間變化。

sns.pointplot(    x=None,    y=None,    hue=None,    data=None,    
order=None,    hue_order=None,   
estimator=<function mean at 0x0000027F6E56E798>,   
ci=95,    n_boot=1000,    units=None,    seed=None,  
markers='o',    linestyles='-',    
dodge=False,    join=True,    
scale=1,    orient=None,    color=None,   
palette=None,    errwidth=None,    capsize=None,  
ax=None,    **kwargs,)
ax = sns.pointplot(x="time", y="total_bill", hue="smoker",
data=tips,estimator=np.median,dodge=True, 
palette="Set2",markers=["o", "*"],linestyles=["-", " "])
# 線條樣式選項(xiàng):'-', '--', '-.', ':', 'None', ' ', '',
#'solid', 'dashed', 'dashdot', 'dotted'
image
2.3.4 catplot()
  • 用于將分類圖繪制到FacetGrid上的圖形級(jí)界面。

  • 此功能提供對(duì)多個(gè)軸級(jí)功能的訪問(wèn),這些功能使用幾種視覺(jué)表示之一顯示數(shù)值與一個(gè)或多個(gè)分類變量之間的關(guān)系。 kind參數(shù)選擇要使用的基礎(chǔ)軸級(jí)功能:

  • 分類散點(diǎn)圖:

  • :func:stripplot(默認(rèn)為kind =“ strip”;

  • :func:swarmplot(帶有kind =“ swarm”

  • 分類分布圖:

  • :func:boxplot(帶有kind =“ box”

  • :func:violinplot(帶有kind =“ violin”

  • :func:boxenplot(帶有kind =“ boxen''

  • 分類估計(jì)圖:

  • :func:pointplot(帶有kind =“ point”

  • :func:barplot(帶有kind =“ bar''

  • :func:countplot(帶有kind =“ count”

  • 額外的關(guān)鍵字參數(shù)將傳遞給基礎(chǔ)函數(shù),因此您應(yīng)該參考文檔以了解每種類型的選項(xiàng)。

  • 請(qǐng)注意,與直接使用軸級(jí)功能時(shí)不同,數(shù)據(jù)必須是在長(zhǎng)格式的DataFrame中傳遞,并通過(guò)傳遞字符串指定變量到x'',y'',``hue''等。

  • 與基礎(chǔ)圖函數(shù)一樣,如果變量具有“分類”數(shù)據(jù)類型,則分類變量的級(jí)別及其順序?qū)膶?duì)象中推斷出來(lái)。否則,您可能必須使用更改數(shù)據(jù)框排序或使用函數(shù)參數(shù)(“ orient”,“ order”,“ hue_order”等)正確設(shè)置繪圖。

sns.catplot(    x=None,    y=None,    hue=None,    
data=None,    row=None,    col=None,    
col_wrap=None,    estimator=<function mean at 0x0000027F6E56E798>,   
ci=95,    n_boot=1000,    units=None,    
seed=None,    order=None,    hue_order=None,    
row_order=None,    col_order=None,    
kind='strip',#Options are: "point", "bar", "strip", "swarm",    
#"box", "violin", or "boxen" 這種獨(dú)立圖形的參數(shù)在cat圖中也可以用    
# 比如violin的split、inner、scale、cut    
height=5,    aspect=1,    orient=None,    
color=None,    palette=None,    legend=True,   
legend_out=True,#設(shè)置圖例的位置,默認(rèn)在外側(cè)    
sharex=True,    sharey=True,    
margin_titles=False,    
facet_kws=None,    
**kwargs,)
# 因?yàn)橛衏ol和row參數(shù) 因此可以像關(guān)系圖relplot一樣畫(huà)出多個(gè)圖像
ax=sns.catplot(x='day',y='tip',hue='sex',kind='violin',
inner=None,split=True,col='smoker',\            
col_wrap=2,legend_out=False,scale='count',cut=0,            
palette='Wistia',data=tips)

ax=sns.catplot(x='day',y='tip',hue='sex',kind='point',col='smoker',\               
palette='Wistia_r',legend_out=False,data=tips)
image
image

3 Distribution plots(分布圖)

3.1 distplot(直方圖)
  • 直方圖又稱質(zhì)量分布圖,它是表示資料變化情況的一種主要工具。用直方圖可以解析出資料的規(guī)則性,比較直觀地看出產(chǎn)品質(zhì)量特性的分布狀態(tài),對(duì)于資料分布狀況一目了然,便于判斷其總體質(zhì)量分布情況。直方圖表示通過(guò)沿?cái)?shù)據(jù)范圍形成分箱(好像是等距分箱?),然后繪制條以顯示落入每個(gè)分箱的觀測(cè)次數(shù)的數(shù)據(jù)分布。

  • bins:int或list,控制直方圖的劃分,設(shè)置矩形圖(就是塊兒的多少)數(shù)量,除特殊要求一般默認(rèn);

  • hist:是否顯示方塊;

  • kde:是否顯示核密度估計(jì)曲線;

  • rug:控制是否生成觀測(cè)數(shù)值的小細(xì)條(邊際毛毯);

  • fit:控制擬合的參數(shù)分布圖形,能夠直觀地評(píng)估它與觀察數(shù)據(jù)的對(duì)應(yīng)關(guān)系(黑色線條為確定的分布);

  • {hist, kde, rug, fit}_kws :參數(shù)接收字典類型,可以自行定義更多高級(jí)的樣式;

  • norm_hist:若為True, 則直方圖高度顯示密度而非計(jì)數(shù)(含有kde圖像中默認(rèn)為True);

  • vertical:放置的方向,如果為真,則觀測(cè)值位于y-軸上(默認(rèn)False,x軸上);

  • axlabel : string, False, or None, 設(shè)置標(biāo)簽。

a=np.random.normal(loc=1,scale=1,size=2000)
b=np.random.normal(loc=0,scale=1,size=2000)
c=np.random.randn(2000,1)
ax=sns.distplot(a)
ax=sns.distplot(b,bins=50)
ax=sns.distplot(c,bins=100)
image
sns.relplot(x="total_bill", y="tip", color="c",col="time",  
hue="smoker",data=tips)
<seaborn.axisgrid.FacetGrid at 0x27f14335908>
image

3.2 kdeplot(核密度圖)

  • 核密度估計(jì)(kernel density estimation)是在概率論中用來(lái)估計(jì)未知的密度函數(shù),屬于非參數(shù)檢驗(yàn)方法之一。通過(guò)核密度估計(jì)圖可以比較直觀的看出數(shù)據(jù)樣本本身的分布特征。具體用法如
sns.kdeplot(    data,   
 data2=None, #二元kde   
 shade=False, # 區(qū)域內(nèi)是否要有顏色   
 vertical=False, #垂直:布爾型,可選 如果為True,則密度在x軸上。   
 kernel='gau', # 適合內(nèi)核形狀的代碼。 雙變量KDE只能使用高斯核    
# 可選項(xiàng) 'gau' | 'cos' | 'biw' | 'epa' | 'tri' | 'triw'    bw='scott',     
#bw : {'scott' | 'silverman' | scalar | pair of scalars }   
 # 用于確定二元圖每個(gè)維度的內(nèi)核大小,標(biāo)量因子或標(biāo)量的參考方法的名稱。     
#請(qǐng)注意,基礎(chǔ)計(jì)算庫(kù) 對(duì)此參數(shù)具有不同的含義:statsmodels直接使用它,   
 # 而scipy將其作為數(shù)據(jù)標(biāo)準(zhǔn)差的比例因子。    
gridsize=100,#評(píng)估網(wǎng)格中離散點(diǎn)的數(shù)量    
cut=3,    
clip=None,# 一對(duì)標(biāo)量或一對(duì)標(biāo)量(可選)。    
 #用于擬合KDE的數(shù)據(jù)點(diǎn)的上下限。 可以為雙變量圖提供一對(duì)(低,高)邊界。    
legend=True,    
cumulative=False,#如果為True,則繪制kde估計(jì)的累積分布   
 shade_lowest=True, #是否有最低值渲染,這個(gè)參數(shù)只有在二維密度圖上才有效;    
cbar=False,#畫(huà)二元圖時(shí),形成一個(gè)顏色條    
cbar_ax=None,    cbar_kws=None,   
 ax=None,    **kwargs,)
iris = sns.load_dataset("iris")
iris.head()
#萼片長(zhǎng)度
# 萼片寬度
# 花瓣長(zhǎng)度
# 花瓣寬度
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
setosa = iris.loc[iris.species == "setosa"]
virginica = iris.loc[iris.species == "virginica"]
ax = sns.kdeplot(setosa.sepal_width, setosa.sepal_length,
 cmap="Reds", shade=True, shade_lowest=False,cbar=True)

ax = sns.kdeplot(virginica.sepal_width, virginica.sepal_length,
gridsize=100, cmap="Blues", shade=True, 
shade_lowest=False,cbar=True)

# kde圖本身并沒(méi)有cmap參數(shù),why?
image
ax = sns.kdeplot(virginica.sepal_width, virginica.sepal_length,
gridsize=100,                 
cmap="Greens", shade=True, shade_lowest=False,cbar=True)
image
ax = sns.kdeplot(virginica.sepal_width, gridsize=100,                
 shade=True, shade_lowest=False,cbar=True)

ax = sns.kdeplot(virginica.sepal_length, gridsize=100,                 
shade=True, shade_lowest=False,cbar=True)
image

3.3 jointplot(聯(lián)合分布圖)

  • 聯(lián)合概率分布簡(jiǎn)稱聯(lián)合分布,是兩個(gè)及以上隨機(jī)變量組成的隨機(jī)向量的概率分布。根據(jù)隨機(jī)變量的不同,聯(lián)合概率分布的表示形式也不同。對(duì)于離散型隨機(jī)變量,聯(lián)合概率分布可以以列表的形式表示,也可以以函數(shù)的形式表示;對(duì)于連續(xù)型隨機(jī)變量,聯(lián)合概率分布通過(guò)一非負(fù)函數(shù)的積分表示。
sns.jointplot(    x,    y,    data=None,    
kind='scatter', #{ "scatter" | "reg" | "resid" | "kde" | "hex" }   
 stat_func=None,    color=None,    
height=6, #圖形高度    
ratio=5, #關(guān)節(jié)軸高度與邊緣軸高度之比。   
space=0.2, #關(guān)節(jié)軸和邊緣軸之間的空隙高低    
dropna=True,    
xlim=None, #繪制前要設(shè)置的軸限制。    
ylim=None,    
joint_kws=None,   
marginal_kws=None,   
annot_kws=None,    
**kwargs,)
sns.jointplot(virginica.sepal_width, virginica.sepal_length,
xlim=[2,5],ylim=[5,9],kind='kde',
shade=False)

sns.jointplot(virginica.sepal_width, virginica.sepal_length,
xlim=[2,5],ylim=[5,9],kind='kde')
<seaborn.axisgrid.JointGrid at 0x242cf36a048>
image
image
ax=sns.jointplot(virginica.sepal_width, virginica.sepal_length,
xlim=[2,5],ylim=[5,9])

ax=sns.jointplot(virginica.sepal_width, virginica.sepal_length,
xlim=[2,5],ylim=[5,9],kind='reg')
image
image
g = sns.jointplot("sepal_width", "petal_length", data=iris,kind="kde",
 space=0,ratio=6 ,color="r",cbar=True)
image
g = sns.jointplot("sepal_width", "petal_length", kind='reg',data=iris,
 space=0,ratio=6 ,color="r")
image

3.4 pairplot(變量關(guān)系組圖)

  • 在數(shù)據(jù)集中繪制成對(duì)關(guān)系的圖。默認(rèn)情況下,該函數(shù)將創(chuàng)建一個(gè)軸網(wǎng)格,這樣數(shù)據(jù)中的每個(gè)變量都將通過(guò)跨一行的y軸和跨單個(gè)列的x軸共享。對(duì)對(duì)角線軸的處理方式不同,繪制的圖顯示該列中變量的數(shù)據(jù)的單變量分布。此外,還可以在行和列上顯示變量子集或繪制不同的變量。具體如下:
sns.pairplot(    data,    hue=None,    
hue_order=None,    palette=None,    vars=None,    
x_vars=None,#數(shù)據(jù)中的變量,分別用于圖的行和列; 即制作非正方形圖。    
y_vars=None,    
kind='scatter', # {'scatter', 'reg'}   
diag_kind='auto',#  {'auto', 'hist', 'kde', None}    
markers=None,    height=2.5,    
aspect=1, #寬高比例    
corner=False,    dropna=True,    plot_kws=None,    
diag_kws=None,    grid_kws=None,    
size=None,)
sns.pairplot(iris,palette='Reds',
hue="species", markers=["o", "s", "d"])
<seaborn.axisgrid.PairGrid at 0x242def58208>
image

4 Regression plots(回歸圖)

4.1 lmplot(回歸圖)

sns.lmplot(    x,    y,    data,    hue=None,    col=None,    
row=None,    palette=None,    col_wrap=None,    
height=5,    aspect=1,    markers='o',    sharex=True,    
sharey=True,    hue_order=None,    col_order=None,    
row_order=None,    legend=True,    legend_out=True,   
 x_estimator=None,    x_bins=None,    x_ci='ci',   
 scatter=True,    fit_reg=True,    ci=95,    
n_boot=1000,    units=None,    seed=None,   
order=1,#多項(xiàng)式回歸,控制進(jìn)行回歸的冪次,設(shè)定指數(shù),可以用多項(xiàng)式擬合;    
logistic=False,   
lowess=False,#如果是True,使用statsmodels來(lái)估計(jì)一個(gè)非參數(shù)的模型(局部加權(quán)線性回歸)。   
 #這種方法具有最少的假設(shè),盡管它是計(jì)算密集型的,但目前無(wú)法為這類模型繪制置信區(qū)間;    
robust=False, #如果是True,使用statsmodels來(lái)估計(jì)一個(gè)穩(wěn)健的回歸(魯棒線性模型)。   
 #這將減少異常值。請(qǐng)注意 logistic回歸和robust回歸相較于    
#簡(jiǎn)單線性回歸需要更大的計(jì)算量,其置信區(qū)間的產(chǎn)生也依賴于bootstrap采樣,    
#你可以關(guān)掉置信區(qū)間估計(jì)來(lái)提高速度(ci=None)    
logx=False, #轉(zhuǎn)化為log(x)    
x_partial=None,    
y_partial=None,    
truncate=True,    
x_jitter=None,#給x,y軸隨機(jī)增加噪音點(diǎn),設(shè)置這兩個(gè)參數(shù)不影響最后的回歸直線;    
y_jitter=None,    scatter_kws=None,    
line_kws=None,    
size=None,)
tips.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
sns.lmplot( 'tip',    'total_bill',    data=tips,    hue='sex',    col='day',    
row='smoker',    palette='Set2',    col_wrap=None,    height=5,    
aspect=1,    markers='o',    sharex=True,    sharey=True,    
hue_order=None,    col_order=None,    row_order=None,    
legend=True,    legend_out=True,    x_estimator=None,    
x_bins=None,    x_ci='ci',    scatter=True,order=1)
<seaborn.axisgrid.FacetGrid at 0x21b540bad08>
image
g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,               
palette=dict(Yes="g", No="y"),logx=True)

g = (
g.set_axis_labels("Total bill (US Dollars)", "Tip")     
.set(xlim=(0, 60), ylim=(0, 12),          
      xticks=[10, 30, 50], yticks=[2, 6, 10]) 
.fig.subplots_adjust(wspace=.02))
image
g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,              \
 palette=dict(Yes="g", No="y"),order=3)

g = (g.set_axis_labels("Total bill (US Dollars)", "Tip")     
.set(xlim=(0, 60), ylim=(0, 12), 
       xticks=[10, 30, 50], yticks=[2, 6, 10])     
.fig.subplots_adjust(wspace=.02))
image

4.2 regplot()

  • 線性回歸 或者 邏輯回歸

  • lmplot可比較的維度更多

sns.regplot(x,    y,    data=None,    x_estimator=None,   
 x_bins=None,    x_ci='ci',    scatter=True,    fit_reg=True,   
ci=95,    n_boot=1000,    units=None,    seed=None,    
order=1,    logistic=False,    lowess=False,    robust=False,   
logx=False,    x_partial=None,    y_partial=None,    truncate=True,    
dropna=True,    x_jitter=None,    y_jitter=None,    label=None,    
color=None,    marker='o',    scatter_kws=None,    
line_kws=None,    ax=None,)
# logistic=True, 邏輯回歸
tips["big_tip"] = (tips.tip / tips.total_bill) < .175
ax = sns.regplot(x="total_bill", y="big_tip", data=tips,
logistic=True, n_boot=500, y_jitter=.03)
image
tips['big_tip'] = (tips['tip'] / tips['total_bill']) < 0.15 # 構(gòu)造y 得到的是布爾值 0 OR 1
sns.regplot(x=tips['total_bill'], y=tips['big_tip'], logistic=True)
plt.title('Logistic Regression')
plt.show()
# 即沒(méi)有y,所以在有監(jiān)督學(xué)習(xí)的情況下,需要我們自己構(gòu)造一個(gè)y。
# 在我上面給出的代碼中,y代表的含義是{0:小費(fèi)超過(guò)賬單的15%,1:小費(fèi)沒(méi)超過(guò)賬單的15%}。
# 為了方便可視化,這里只將total_bill一列作為我們的X。
#這就是最后繪制出來(lái)的邏輯回歸圖像,由于現(xiàn)實(shí)中的數(shù)據(jù)不總是理想化的,
#所以很少出現(xiàn)像之前展示的sigmoid函數(shù)圖像那么的“S”,但也能看出規(guī)律:
#賬單較小的更有可能給出超過(guò)15%的小費(fèi),這也符合生活經(jīng)驗(yàn)。
# 來(lái)源:https://zhuanlan.zhihu.com/p/39363869
image

5.Matrix plots(矩陣圖)

5.1 heatmap(熱力圖)

  • 利用熱力圖可以看數(shù)據(jù)表里多個(gè)特征兩兩的相似度,類似于色彩矩陣。
sns.heatmap(data,    vmin=None,    vmax=None,    cmap=None,    
center=None,    robust=False,    annot=None,    fmt='.2g',    annot_kws=None,    
linewidths=0,    linecolor='white',    cbar=True,    cbar_kws=None,  
cbar_ax=None,    square=False,    xticklabels='auto',    
yticklabels='auto',    
mask=None,    ax=None,    **kwargs,)
# data:矩陣數(shù)據(jù)集,可以使numpy的數(shù)組(array),如果是pandas的dataframe,
# 則df的index/column信息會(huì)分別對(duì)應(yīng)到heatmap的columns和rows;
# vmax,vmin:圖例中最大值和最小值的顯示值,沒(méi)有該參數(shù)時(shí)默認(rèn)不顯示;
# cmap:從數(shù)字到色彩空間的映射,取值是matplotlib包里的colormap名稱或顏色對(duì)象,或者表示顏色的列表;
# center:數(shù)據(jù)表取值有差異時(shí),設(shè)置熱力圖的色彩中心對(duì)齊值。通過(guò)設(shè)置center值,可以調(diào)整生成的圖像顏色的整體深淺;設(shè)置center數(shù)據(jù)時(shí),如果有數(shù)據(jù)溢出,則手動(dòng)設(shè)置的vmax、vmin會(huì)自動(dòng)改變 ;

# robust:默認(rèn)取值False;如果是False,且沒(méi)設(shè)定vmin和vmax的值,熱力圖的顏色映射范圍根據(jù)具有魯棒性的分位數(shù)設(shè)定,而不是用極值設(shè)定;
# annot(annotate的縮寫(xiě)):默認(rèn)取值False;如果是True,在熱力圖每個(gè)方格寫(xiě)入數(shù)據(jù);如果是矩陣,在熱力圖每個(gè)方格寫(xiě)入該矩陣對(duì)應(yīng)位置數(shù)據(jù);
# fmt:字符串格式代碼,矩陣上標(biāo)識(shí)數(shù)字的數(shù)據(jù)格式,比如保留小數(shù)點(diǎn)后幾位數(shù)字;
# annot_kws:默認(rèn)取值False;如果是True,設(shè)置熱力圖矩陣上數(shù)字的大小顏色字體;
# square:設(shè)置熱力圖矩陣小塊形狀,默認(rèn)值是False;
# xticklabels, yticklabels:控制每行列標(biāo)簽名的輸出。默認(rèn)值是auto,自動(dòng)選擇標(biāo)簽的標(biāo)注間距,將標(biāo)簽名不重疊的部分(或全部)輸出。
#如果是True,則以DataFrame的列名作為標(biāo)簽名;
# mask:控制某個(gè)矩陣塊是否顯示出來(lái)。默認(rèn)值是None。
#如果是布爾型的DataFrame,則將DataFrame里True的位置用白色覆蓋掉。
data = np.random.randn(50, 20)
ax = sns.heatmap(data, xticklabels=2,yticklabels=4)
image
x= np.random.rand(10, 10)
ax = sns.heatmap(x,annot=True,
annot_kws={'size':9,'weight':'bold', 'color':'w'},fmt='.2f')
image

5.2 聚類分析圖 clustermap()

  • 聚類分析指將物理或抽象對(duì)象的集合分組為由類似的對(duì)象組成的多個(gè)類的分析過(guò)程。它是一種重要的人類行為

  • 聚類與分類的不同在于,聚類所要求劃分的類是未知的。

  • 從機(jī)器學(xué)習(xí)的角度講,簇相當(dāng)于隱藏模式。聚類是搜索簇的無(wú)監(jiān)督學(xué)習(xí)過(guò)程。與分類不同,無(wú)監(jiān)督學(xué)習(xí)不依賴預(yù)先定義的類或帶類標(biāo)記的訓(xùn)練實(shí)例,需要由聚類學(xué)習(xí)算法自動(dòng)確定標(biāo)記,而分類學(xué)習(xí)的實(shí)例或數(shù)據(jù)對(duì)象有類別標(biāo)記。聚類是觀察式學(xué)習(xí),而不是示例式的學(xué)習(xí)。

  • 聚類分析是一種探索性的分析,在分類的過(guò)程中,人們不必事先給出一個(gè)分類的標(biāo)準(zhǔn),聚類分析能夠從樣本數(shù)據(jù)出發(fā),自動(dòng)進(jìn)行分類。聚類分析所使用方法的不同,常常會(huì)得到不同的結(jié)論。不同研究者對(duì)于同一組數(shù)據(jù)進(jìn)行聚類分析,所得到的聚類數(shù)未必一致。

  • 采用k-均值、k-中心點(diǎn)等算法的聚類分析工具已被加入到許多著名的統(tǒng)計(jì)分析軟件包中,如SPSS、SAS等。

  • clustermap() 可以將矩陣數(shù)據(jù)集繪制為層次聚類熱圖**

iris = sns.load_dataset("iris")
species = iris.pop("species")g = sns.clustermap(iris)
image
iris
sepal_length sepal_width petal_length petal_width
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
... ... ... ... ...
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8

150 rows × 4 columns

#聚類分析 參考:https://blog.csdn.net/dsdaasaaa/article/details/94590153# 聚類分析 參考2:https://blog.csdn.net/qq_19528953/article/details/79133889

6 FacetGrid()刻面網(wǎng)格圖

  • 在探索中多維數(shù)據(jù)時(shí),一種有用的方法是在數(shù)據(jù)集的不同子集上繪制同一類型圖的多個(gè)子圖。該類將數(shù)據(jù)集映射到與數(shù)據(jù)集中變量級(jí)別相對(duì)應(yīng)的行和列網(wǎng)格中排列的多個(gè)軸上。它生成的圖形通常被稱為“格子”或“格子”繪圖,它可以使查看者快速觀察到有關(guān)復(fù)雜數(shù)據(jù)的大量信息。

  • FacetGrid當(dāng)您想要在數(shù)據(jù)集的子集中分別可視化變量的分布或多個(gè)變量之間的關(guān)系時(shí),該類非常有用。一個(gè)FacetGrid可以與多達(dá)三個(gè)維度可以得出:row,col,和hue。前兩個(gè)與得到的軸陣列有明顯的對(duì)應(yīng)關(guān)系; 將hue變量視為沿深度軸的第三個(gè)維度,其中不同的級(jí)別用不同的顏色繪制。通過(guò)使用FacetGrid數(shù)據(jù)框初始化對(duì)象以及將形成網(wǎng)格的行,列或hue維度的變量名稱來(lái)使用該類。這些變量(hue)應(yīng)該是分類的或離散的,然后變量的每個(gè)級(jí)別的數(shù)據(jù)將用于沿該軸的小平面。此外,每個(gè)的relplot(),catplot()以及l(fā)mplot()在內(nèi)部使用這些對(duì)象。

  • 有點(diǎn)類似于matplotlib中的子圖

sns.FacetGrid(    data,    row=None,    col=None,    hue=None,    
col_wrap=None,    sharex=True,    sharey=True,    height=3,    
aspect=1,    palette=None,    row_order=None,    col_order=None,    
hue_order=None,    hue_kws=None,    dropna=True,    
legend_out=True,    despine=True,    margin_titles=False,    
xlim=None,    ylim=None,    subplot_kws=None,    
gridspec_kws=None,    size=None,)
#FacetGrid并不能直接繪制我們想要的圖像,它的基本工作流程是FacetGrid使用數(shù)據(jù)集和
#用于構(gòu)造網(wǎng)格的變量初始化對(duì)象。然后,可以通過(guò)調(diào)用FacetGrid.map()或?qū)⒁粋€(gè)或多個(gè)繪圖函數(shù)
#應(yīng)用于每個(gè)子集 FacetGrid.map_dataframe(),最后,可以使用其他修改參數(shù)的方法調(diào)整繪圖。
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="sex", hue="time", palette="Set1",                  
hue_order=["Dinner", "Lunch"])
#2*1
image
kws = dict(s=50, linewidth=.5, edgecolor="w")
g = sns.FacetGrid(tips, col="sex", hue="time", palette="Set1",                  
hue_order=["Dinner", "Lunch"])#2*1
g = (g.map(plt.scatter, "total_bill", "tip", **kws)    
 .add_legend())
#鏈?zhǔn)秸{(diào)用# 鏈?zhǔn)秸{(diào)用參考:# https://cloud.tencent.com/developer/article/1463032
# 鏈?zhǔn)秸{(diào)用 參考2:http://www.bubuko.com/infodetail-396024.html
image

7 PairGrid()

  • 用于繪制數(shù)據(jù)集中成對(duì)關(guān)系的子圖網(wǎng)格。該類將數(shù)據(jù)集中的每個(gè)變量映射到多軸網(wǎng)格中的列和行。不同的軸級(jí)繪圖函數(shù)可用于繪制上、下三角形的二元圖解,并可在對(duì)角線上顯示每個(gè)變量的邊緣分布。讀到這里你就會(huì)發(fā)現(xiàn),它和pairplot()有什么區(qū)別呢?

  • 其實(shí)PairGrid和pairplot從原理來(lái)說(shuō)是一樣的,但是前面我們可以發(fā)現(xiàn)pairplot繪制的圖像上、下三角形是關(guān)于主對(duì)角線對(duì)稱的,而PairGrid則可修改上、下三角形和主對(duì)角線的圖像形狀

sns.PairGrid(    data,    hue=None,    hue_order=None,    palette=None,   
hue_kws=None,    vars=None,    x_vars=None,    y_vars=None,    
corner=False,    diag_sharey=True,    height=2.5,    aspect=1,    
layout_pad=0,    despine=True,    dropna=True,    size=None,)
iris = sns.load_dataset("iris")
g=sns.PairGrid(iris,hue='species')
g = g.map(plt.scatter)
image
g=sns.PairGrid(iris)
g = g.map_diag(plt.hist, edgecolor="w")# diagonal 對(duì)角線上畫(huà)直方圖
g = g.map_offdiag(sns.kdeplot) # 對(duì)角線以外畫(huà)散點(diǎn)圖
# g = g.map_upper(sns.kdeplot, edgecolor="w", s=50)
image
g=sns.PairGrid(iris)
g = g.map_diag(plt.hist, edgecolor="w",color='g')# diagonal 對(duì)角線上畫(huà)直方圖
g = g.map_offdiag(sns.kdeplot,shade=True,color='r') # 對(duì)角線以外畫(huà)密度圖
image
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris,hue="species")
g = g.map_upper(sns.scatterplot)#在上對(duì)角線子圖上用二元函數(shù)繪制的圖
g = g.map_lower(sns.kdeplot,color='r')#在下對(duì)角線子圖上用二元函數(shù)繪制的圖
g = g.map_diag(sns.kdeplot)#對(duì)角線單變量子圖
image

公眾號(hào):木丁筆記,可以關(guān)注我哦!

公眾號(hào)二維碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容