?文章目錄
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)
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ù)分組
ax = sns.scatterplot(x="total_bill", y="tip",
hue="day", style="time",size='size',
legend='full',data=tips)
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)
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>
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>
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>
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>
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;"></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>
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>
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>
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")
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")
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")
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")
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ù)
ax=sns.barplot(x='day',y='tip',hue='sex',estimator=np.sum,\
capsize=0.1,\
data=tips,palette='Set2')
# 聚合函數(shù)為sum# 設(shè)置誤差線的頂端和底端寬度
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>
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'
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)
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)
sns.relplot(x="total_bill", y="tip", color="c",col="time",
hue="smoker",data=tips)
<seaborn.axisgrid.FacetGrid at 0x27f14335908>
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?
ax = sns.kdeplot(virginica.sepal_width, virginica.sepal_length,
gridsize=100,
cmap="Greens", shade=True, shade_lowest=False,cbar=True)
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)
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>
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')
g = sns.jointplot("sepal_width", "petal_length", data=iris,kind="kde",
space=0,ratio=6 ,color="r",cbar=True)
g = sns.jointplot("sepal_width", "petal_length", kind='reg',data=iris,
space=0,ratio=6 ,color="r")
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>
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>
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))
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))
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)
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
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)
x= np.random.rand(10, 10)
ax = sns.heatmap(x,annot=True,
annot_kws={'size':9,'weight':'bold', 'color':'w'},fmt='.2f')
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)
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
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
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)
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)
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à)密度圖
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ì)角線單變量子圖
公眾號(hào):木丁筆記,可以關(guān)注我哦!
