seaborn常用图形总结

​文章目录

  • 1.Relational plots(关系图)

  • 1.1 scatterplot(散点图)

  • 1.2 lineplot(线图)

  • 1.3 relplot(关系图)

  • 2.Categorical plots(分类图)

  • 2.1 Categorical scatterplots(分类散点图)

  • 2.1.1 stripplot(分布散点图)

  • 2.1.2 swarmplot(分布密度散点图)

  • 2.2 Categorical distribution plots(分类分布图)

  • 2.2.1 boxplot(箱线图)

  • 2.2.2 violinplot(小提琴图)

  • 2.2.3 violinplot+stripplot(小提琴图+分布散点图)

  • 2.2.4 violinplot+swarmplot(小提琴图+分布密度散点图)

  • 2.2.5 boxplot+stripplot(箱线图+分布散点图)

  • 2.2.6 boxplot+swarmplot(箱线图+分布密度散点图)

  • 2.3 Categorical estimate plots(分类估计图)

  • 2.3.1 barplot(条形图)

  • 2.3.2 countplot(计数图)

  • 2.3.3 piontplot(点图)

  • 2.3.4 catplot()

  • 3 Distribution plots(分布图)

  • 3.1 distplot(直方图)

  • 3.2 kdeplot(核密度图)

  • 3.3 jointplot(联合分布图)

  • 3.4 pairplot(变量关系组图)

  • 4 Regression plots(回归图)

  • 4.1 lmplot(回归图)

  • 4.2 regplot()

  • 5.Matrix plots(矩阵图)

  • 5.1 heatmap(热力图)

  • 5.2 clustermap(聚类图)

  • 6 FacetGrid()

  • 7 PairGrid()

    部分内容来自:https://blog.csdn.net/qq_40195360/article/details/86605860

1.Relational plots(关系图)

1.1 scatterplot(散点图)

import numpy as np``import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")
# seaborn官方小费数据
tips = sns.load_dataset("tips")
#消费总金额和小费金额的散点图
ax = sns.scatterplot(x="total_bill", y="tip", data=tips) 
image
sns.scatterplot(    
x=None,    
y=None,    
hue=None,#hue 色彩设置分组,不同分类颜色不同    
style=None, # style 设置分组,不同分组 标记不同   
size=None,# size 设置分组,不同分类大小不同    
data=None,    
palette=None, # palette 设置颜色 list, or dict(类似时一组配色,选了不同的配色组,出来的颜色色系不同)   
hue_order=None,# 设置图例的顺序 list 图例为数字时 不管用    
hue_norm=None,    
sizes=None,    
size_order=None, # 设置图例的顺序 list 图例为数字时 不管用    
size_norm=None,    
markers=True,# 标记格式,设为True是默认标记,False不使用标记  boolean, list, or dictionary    
style_order=None, # 设置图例的顺序 list 图例为数字时 不管用    
x_bins=None,   
y_bins=None,    
units=None,    
estimator=None,    
ci=95, #Confidence interval 置信区间   
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 相当于分组 即根据size 人数分组
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,#设置线条格式 实线or虚线,设置False时全部是实线
    markers=None,
    style_order=None,
    units=None,
    estimator='mean',# pandas 方法,同样X轴多个y值的聚合方法(max,min,sum,min等) none时 每个Y值的线都画出来
    ci=95,
    n_boot=1000,
    seed=None, # 使用random时需要
    sort=True,
    err_style='band', #置信区间的格式 带状 或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 关系图

sns.relplot(    x=None,    y=None,    hue=None,   
 size=None,    style=None,    data=None,    row=None,    
col=None,    # row,col 将确定网格面的分类变量 比如 不同星期N,  
  #不同性别时,消费人数和消费金额的关系 每一行显示同意性别 不同周N
# ,还是每一行显示相同周N 不同性别    
col_wrap=None, # 不能和row参数一起使用。没有row时,相当于只有col一
#个参数,此时按几列排放   
row_order=None,# 改变大网格的行的顺序 ,顺序按照列表呈现    
col_order=None,# 改变大网格的列的顺序 ,顺序按照列表呈现    
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, #长宽比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 吸烟与不抽烟的人的消费金额和给小费的关系

image

2.Categorical plots(分类图)

  • Categorical plots(分类图)可以具体分为下面三种类型,8个小图:
Categorical scatterplots(分类散点图)
  • stripplot(分布散点图)

  • swarmplot(分布密度散点图)

Categorical distribution plots(分类分布图)
  • boxplot(箱线图)

  • violinplot(小提琴图)

boxenplot(字母价值图???)
Categorical estimate plots(分类估计图)
pointplot(点图)
barplot(条形图)
countplot(计数统计图)
2.1.1 stripplot
sns.stripplot(    x=None,    y=None,    hue=None,    data=None, 
   order=None,    hue_order=None,   
 jitter=True, # 抖动,False True OR 0-1之间的小数,减轻数据的重叠   
dodge=False, # 有hue变量时,如果dodge=False 那么不同颜色的值会混在一起,    
#如果dodge=True,那么会像条形图一样分开呈现    
orient=None, # 横向或竖向 'h','v',    
#这通常是根据输入变量的dtype推断出来的,    
#但当变量是数字或者绘制宽格式数据时,可以用来指定“分类”。    
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)

image
sns.stripplot(x='day',y='tip',hue='sex',data=tips,jitter=0.2,
orient='v',dodge=True)# 不同性别周N的小费金额

image
sns.stripplot(x='day',y='tip',hue='sex',\              
data=tips,jitter=0.2,orient='v',\              
dodge=True,palette='CMRmap_r')
#以下是palette的可选配色参数. 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

image
2.1.2 swarmplot(分布密度散点图)
  • 这个函数类似于stripplot(),但是对点进行了调整(只沿着分类轴),这样它们就不会重叠。这更好地表示了值的分布,但它不能很好地扩展到大量的观测。
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')

image

png

2.2 Categorical distribution plots(分类分布图)

2.2.1 boxplot(箱线图)
  • boxplot(箱线图,又称为盒须图、盒式图)便于在变量之间或跨类别变量级别比较的方式,显示定量数据的分布情况。框显示数据集的四分位数,线显示分布的其余部分,它能显示出一组数据的最大值、最小值、中位数及上下四分位数。

  • 一个矩形盒,两端边的位置分别对应数据批的上下四分位数(Q3和Q1)。在矩形盒内部中位数(Xm)位置画一条线段为中位线。

  • 在Q3+1.5IQR和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(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, # 离群值的 标记大小    
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)

image
2.2.2 violinplot(小提琴图)
  • violinplot与boxplot扮演类似的角色,箱线图展示了分位数的位置,它显示了定量数据在一个(或多个)分类变量的多个层次上的分布,这些分布可以进行比较。

  • 与箱形图中所有绘图组件都对应于实际数据点不同,小提琴绘图以基础分布的核密度估计为特征,通过小提琴图可以知道哪些位置的密度较高。在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计

  • 这是一种可以同时显示多个数据分布的有效和有吸引力的方法,但请记住,估计过程受样本大小的影响,相对较小的样本的小提琴手看起来可能会显得非常平滑。

sns.violinplot(    x=None,    y=None,  
  hue=None,    data=None,    order=None,   
 hue_order=None,   
 bw='scott',#  scott’, ‘silverman’, float,控制拟合程度. 在计算内核带宽时,#     可以引用规则的名称(‘scott’, ‘silverman’)或者使用比例(float)。#     实际内核大小将通过将比例乘以每个bin内数据的标准差来确定;    
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``
#小提琴图默认的坐标范围是数据的最小值到最大值,
# 其扁平的尾部在这两个位置处截断。
#通过设置trim=FALSE可以保留小提琴的尾部    
scale='area', #可选项 {"area", "count", "width"},\    
#如果``count'',则小提琴的宽度将根据该仓中的观察数量进行缩放。   
 # 如果是area或者width,那么小提琴拥有相同的面积或者相同的宽度    
scale_hue=True,#当使用hue分类后,设置为True时,此参数确定是否在主分组变量进行缩放    
gridsize=100, #离散网格中用于计算核密度估计的点数。点数越高越平滑    
width=0.8,    
inner='box', 
#可选项{"box", "quartile", "point", "stick", None}   
 # 分别表示:箱子,四分位,点,数据线和空白    split=False, 
# True or False 是否拆分,当设置为True时,    
#绘制经hue分类的每个级别画出一半的小提琴 ,只能在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'

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 )
#当将色相嵌套与需要两个级别的变量一起使用时,
#将``split''设置为True将为每个级别绘制小提琴的一半。
#这可以使直接比较分布更加容易。
# cut=0 将数据限制在观察数据的范围内

image
2.2.3 violinplot+stripplot(小提琴图+分布散点图)
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(小提琴图+分布密度散点图)
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(箱线图+分布散点图)
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(箱线图+分布密度散点图)
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(分类估计图)

2.3.1 barplot(条形图)
  • 条形图表示数值变量与每个矩形高度的中心趋势的估计值,用矩形条表示点估计和置信区间,并使用误差线提供关于该估计值附近的不确定性的一些指示。具体用法如下:
sns.barplot(    x=None,    y=None,    hue=None,    data=None,    
order=None,    hue_order=None,    
estimator=,#默认为mean。   
 #当然你也可以设置estimator=np.median/np.std/np.var……    ci=95, 
#标准误差    
n_boot=1000,#计算置信区间时要使用的引导程序迭代次数   
units=None,    seed=None,    orient=None,    
color=None,    palette=None,    saturation=0.75,    
errcolor='.26', #表示置信区间的线条的颜色;    
errwidth=None,#float,设置误差条线(和帽)的厚度    
capsize=None,#设置误差棒帽条(上下两根横线)的宽度,float    
dodge=True,    
ax=None,    
**kwargs,)
  • units还没明白什么意思,可以确定的是,unit传入的是一个列名

  • 官方解释:可选的采样单位标识符,将用于执行多级引导程序并考虑重复测量的设计

ax=sns.barplot(x='day',y='tip',hue='smoker',estimator=np.median,\              data=tips,palette='Set2',errwidth=0)# 聚合函数为中位数# 误差线宽度设为0#每天吸烟与否人群小费的中位数
image
ax=sns.barplot(x='day',y='tip',hue='sex',estimator=np.sum,\              
 capsize=0.1,\             
 data=tips,palette='Set2')
# 聚合函数为sum# 设置误差线的顶端和底端宽度
image
2.3.2 countplot(计数图)
  • 计数图可以看作是分类变量而不是定量变量的直方图。基本的API和选项与barflot的API和选项相同,因此您可以比较嵌套变量之间的计数。(工作原理就是对输入的数据分类,条形图显示各个分类的数量)。

  • 在大多数情况下,可以使用numpy或Python对象,但最好使用pandas对象,因为关联的名称将用于注释轴。此外,您可以将分类类型用于
    分组变量以控制绘图元素的顺序。

  • 即使数据具有数字或日期类型,此函数也始终将变量之一视为分类变量,并在相关轴的序数位置(0,1,… n)上绘制数据。

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,)
#不能同时输入X值和y值
sns.countplot(x='day',hue='sex',\             
data=tips,palette='Set2')

image
2.3.3 piontplot(点图)
  • 点图通过散点图的位置表示对数值变量的集中趋势的估计,并使用误差线提供了一些围绕该估计的不确定性的指示。

  • 在集中比较一个或多个分类变量的不同级别时,点图比条形图更有用。他们特别擅长显示交互作用:一个分类变量的级别之间的关系如何在第二个分类变量的级别之间变化。

sns.pointplot(    x=None,    y=None,    hue=None,    data=None,    
order=None,    hue_order=None,   
estimator=,   
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=["-", " "])
# 线条样式选项:'-', '--', '-.', ':', 'None', ' ', '',
#'solid', 'dashed', 'dashdot', 'dotted'
image
2.3.4 catplot()
  • 用于将分类图绘制到FacetGrid上的图形级界面。

  • 此功能提供对多个轴级功能的访问,这些功能使用几种视觉表示之一显示数值与一个或多个分类变量之间的关系。 kind参数选择要使用的基础轴级功能:

  • 分类散点图:

  • :func:stripplot(默认为kind =“ strip”;

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

  • 分类分布图:

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

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

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

  • 分类估计图:

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

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

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

  • 额外的关键字参数将传递给基础函数,因此您应该参考文档以了解每种类型的选项。

  • 请注意,与直接使用轴级功能时不同,数据必须是在长格式的DataFrame中传递,并通过传递字符串指定变量到x'',y'',``hue''等。

  • 与基础图函数一样,如果变量具有“分类”数据类型,则分类变量的级别及其顺序将从对象中推断出来。否则,您可能必须使用更改数据框排序或使用函数参数(“ orient”,“ order”,“ hue_order”等)正确设置绘图。

sns.catplot(    x=None,    y=None,    hue=None,    
data=None,    row=None,    col=None,    
col_wrap=None,    estimator=,   
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" 这种独立图形的参数在cat图中也可以用    
# 比如violin的split、inner、scale、cut    
height=5,    aspect=1,    orient=None,    
color=None,    palette=None,    legend=True,   
legend_out=True,#设置图例的位置,默认在外侧    
sharex=True,    sharey=True,    
margin_titles=False,    
facet_kws=None,    
**kwargs,)
# 因为有col和row参数 因此可以像关系图relplot一样画出多个图像
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(直方图)
  • 直方图又称质量分布图,它是表示资料变化情况的一种主要工具。用直方图可以解析出资料的规则性,比较直观地看出产品质量特性的分布状态,对于资料分布状况一目了然,便于判断其总体质量分布情况。直方图表示通过沿数据范围形成分箱(好像是等距分箱?),然后绘制条以显示落入每个分箱的观测次数的数据分布。

  • bins:int或list,控制直方图的划分,设置矩形图(就是块儿的多少)数量,除特殊要求一般默认;

  • hist:是否显示方块;

  • kde:是否显示核密度估计曲线;

  • rug:控制是否生成观测数值的小细条(边际毛毯);

  • fit:控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系(黑色线条为确定的分布);

  • {hist, kde, rug, fit}_kws :参数接收字典类型,可以自行定义更多高级的样式;

  • norm_hist:若为True, 则直方图高度显示密度而非计数(含有kde图像中默认为True);

  • vertical:放置的方向,如果为真,则观测值位于y-轴上(默认False,x轴上);

  • axlabel : string, False, or None, 设置标签。

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)

image

3.2 kdeplot(核密度图)

  • 核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度估计图可以比较直观的看出数据样本本身的分布特征。具体用法如
sns.kdeplot(    data,   
 data2=None, #二元kde   
 shade=False, # 区域内是否要有颜色   
 vertical=False, #垂直:布尔型,可选 如果为True,则密度在x轴上。   
 kernel='gau', # 适合内核形状的代码。 双变量KDE只能使用高斯核    
# 可选项 'gau' | 'cos' | 'biw' | 'epa' | 'tri' | 'triw'    bw='scott',     
#bw : {'scott' | 'silverman' | scalar | pair of scalars }   
 # 用于确定二元图每个维度的内核大小,标量因子或标量的参考方法的名称。     
#请注意,基础计算库 对此参数具有不同的含义:statsmodels直接使用它,   
 # 而scipy将其作为数据标准差的比例因子。    
gridsize=100,#评估网格中离散点的数量    
cut=3,    
clip=None,# 一对标量或一对标量(可选)。    
 #用于拟合KDE的数据点的上下限。 可以为双变量图提供一对(低,高)边界。    
legend=True,    
cumulative=False,#如果为True,则绘制kde估计的累积分布   
 shade_lowest=True, #是否有最低值渲染,这个参数只有在二维密度图上才有效;    
cbar=False,#画二元图时,形成一个颜色条    
cbar_ax=None,    cbar_kws=None,   
 ax=None,    **kwargs,)
iris = sns.load_dataset("iris")
iris.head()
#萼片长度
# 萼片宽度
# 花瓣长度
# 花瓣宽度
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图本身并没有cmap参数,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(联合分布图)

  • 联合概率分布简称联合分布,是两个及以上随机变量组成的随机向量的概率分布。根据随机变量的不同,联合概率分布的表示形式也不同。对于离散型随机变量,联合概率分布可以以列表的形式表示,也可以以函数的形式表示;对于连续型随机变量,联合概率分布通过一非负函数的积分表示。
sns.jointplot(    x,    y,    data=None,    
kind='scatter', #{ "scatter" | "reg" | "resid" | "kde" | "hex" }   
 stat_func=None,    color=None,    
height=6, #图形高度    
ratio=5, #关节轴高度与边缘轴高度之比。   
space=0.2, #关节轴和边缘轴之间的空隙高低    
dropna=True,    
xlim=None, #绘制前要设置的轴限制。    
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')

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(变量关系组图)

  • 在数据集中绘制成对关系的图。默认情况下,该函数将创建一个轴网格,这样数据中的每个变量都将通过跨一行的y轴和跨单个列的x轴共享。对对角线轴的处理方式不同,绘制的图显示该列中变量的数据的单变量分布。此外,还可以在行和列上显示变量子集或绘制不同的变量。具体如下:
sns.pairplot(    data,    hue=None,    
hue_order=None,    palette=None,    vars=None,    
x_vars=None,#数据中的变量,分别用于图的行和列; 即制作非正方形图。    
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"])

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,#多项式回归,控制进行回归的幂次,设定指数,可以用多项式拟合;    
logistic=False,   
lowess=False,#如果是True,使用statsmodels来估计一个非参数的模型(局部加权线性回归)。   
 #这种方法具有最少的假设,尽管它是计算密集型的,但目前无法为这类模型绘制置信区间;    
robust=False, #如果是True,使用statsmodels来估计一个稳健的回归(鲁棒线性模型)。   
 #这将减少异常值。请注意 logistic回归和robust回归相较于    
#简单线性回归需要更大的计算量,其置信区间的产生也依赖于bootstrap采样,    
#你可以关掉置信区间估计来提高速度(ci=None)    
logx=False, #转化为log(x)    
x_partial=None,    
y_partial=None,    
truncate=True,    
x_jitter=None,#给x,y轴随机增加噪音点,设置这两个参数不影响最后的回归直线;    
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)

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 # 构造y 得到的是布尔值 0 OR 1
sns.regplot(x=tips['total_bill'], y=tips['big_tip'], logistic=True)
plt.title('Logistic Regression')
plt.show()
# 即没有y,所以在有监督学习的情况下,需要我们自己构造一个y。
# 在我上面给出的代码中,y代表的含义是{0:小费超过账单的15%,1:小费没超过账单的15%}。
# 为了方便可视化,这里只将total_bill一列作为我们的X。
#这就是最后绘制出来的逻辑回归图像,由于现实中的数据不总是理想化的,
#所以很少出现像之前展示的sigmoid函数图像那么的“S”,但也能看出规律:
#账单较小的更有可能给出超过15%的小费,这也符合生活经验。
# 来源:https://zhuanlan.zhihu.com/p/39363869
image

5.Matrix plots(矩阵图)

5.1 heatmap(热力图)

  • 利用热力图可以看数据表里多个特征两两的相似度,类似于色彩矩阵。
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:矩阵数据集,可以使numpy的数组(array),如果是pandas的dataframe,
# 则df的index/column信息会分别对应到heatmap的columns和rows;
# vmax,vmin:图例中最大值和最小值的显示值,没有该参数时默认不显示;
# cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;
# center:数据表取值有差异时,设置热力图的色彩中心对齐值。通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变 ;

# robust:默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定;
# annot(annotate的缩写):默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据;
# fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字;
# annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体;
# square:设置热力图矩阵小块形状,默认值是False;
# xticklabels, yticklabels:控制每行列标签名的输出。默认值是auto,自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出。
#如果是True,则以DataFrame的列名作为标签名;
# mask:控制某个矩阵块是否显示出来。默认值是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()

  • 聚类分析指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程。它是一种重要的人类行为

  • 聚类与分类的不同在于,聚类所要求划分的类是未知的。

  • 从机器学习的角度讲,簇相当于隐藏模式。聚类是搜索簇的无监督学习过程。与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据对象有类别标记。聚类是观察式学习,而不是示例式的学习。

  • 聚类分析是一种探索性的分析,在分类的过程中,人们不必事先给出一个分类的标准,聚类分析能够从样本数据出发,自动进行分类。聚类分析所使用方法的不同,常常会得到不同的结论。不同研究者对于同一组数据进行聚类分析,所得到的聚类数未必一致。

  • 采用k-均值、k-中心点等算法的聚类分析工具已被加入到许多著名的统计分析软件包中,如SPSS、SAS等。

  • clustermap() 可以将矩阵数据集绘制为层次聚类热图**

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()刻面网格图

  • 在探索中多维数据时,一种有用的方法是在数据集的不同子集上绘制同一类型图的多个子图。该类将数据集映射到与数据集中变量级别相对应的行和列网格中排列的多个轴上。它生成的图形通常被称为“格子”或“格子”绘图,它可以使查看者快速观察到有关复杂数据的大量信息。

  • FacetGrid当您想要在数据集的子集中分别可视化变量的分布或多个变量之间的关系时,该类非常有用。一个FacetGrid可以与多达三个维度可以得出:row,col,和hue。前两个与得到的轴阵列有明显的对应关系; 将hue变量视为沿深度轴的第三个维度,其中不同的级别用不同的颜色绘制。通过使用FacetGrid数据框初始化对象以及将形成网格的行,列或hue维度的变量名称来使用该类。这些变量(hue)应该是分类的或离散的,然后变量的每个级别的数据将用于沿该轴的小平面。此外,每个的relplot(),catplot()以及lmplot()在内部使用这些对象。

  • 有点类似于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使用数据集和
#用于构造网格的变量初始化对象。然后,可以通过调用FacetGrid.map()或将一个或多个绘图函数
#应用于每个子集 FacetGrid.map_dataframe(),最后,可以使用其他修改参数的方法调整绘图。
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())
#链式调用# 链式调用参考:# https://cloud.tencent.com/developer/article/1463032
# 链式调用 参考2:http://www.bubuko.com/infodetail-396024.html
image

7 PairGrid()

  • 用于绘制数据集中成对关系的子图网格。该类将数据集中的每个变量映射到多轴网格中的列和行。不同的轴级绘图函数可用于绘制上、下三角形的二元图解,并可在对角线上显示每个变量的边缘分布。读到这里你就会发现,它和pairplot()有什么区别呢?

  • 其实PairGrid和pairplot从原理来说是一样的,但是前面我们可以发现pairplot绘制的图像上、下三角形是关于主对角线对称的,而PairGrid则可修改上、下三角形和主对角线的图像形状

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 对角线上画直方图
g = g.map_offdiag(sns.kdeplot) # 对角线以外画散点图
# 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 对角线上画直方图
g = g.map_offdiag(sns.kdeplot,shade=True,color='r') # 对角线以外画密度图
image
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris,hue="species")
g = g.map_upper(sns.scatterplot)#在上对角线子图上用二元函数绘制的图
g = g.map_lower(sns.kdeplot,color='r')#在下对角线子图上用二元函数绘制的图
g = g.map_diag(sns.kdeplot)#对角线单变量子图
image

公众号:木丁笔记,可以关注我哦!

公众号二维码

你可能感兴趣的:(seaborn常用图形总结)