python可视化之——seaborn简单图绘制指南

seaborn可视化统计关系/散点图/折线图 While you should make use of the flexibility afforded by scatterplot( ) and relplot( ), always try to keep in mind that several simple plots are usually more effective than one complex plot. 当你利用 scatterplot( )和 relplot( )所提供的灵活性的同时,应当尽可能地记住一些简单图形,这往往比只记住. 阅读详情

0. 主要内容

该笔记主要包括常见的:散点,折线,box,violin,等图的绘制,可以帮助我们了解数据存在的变量之间的某种关系或者数据趋势。在日常工作中,我们可以进行简单的数据分析和可视化,用于汇报。

1. relplot

主要来自官方文档:https://seaborn.pydata.org/generated/seaborn.relplot.html

replot 用于创建具有子图网格的散点图或折线图形 返回的是一个FacetGrid对象

  1. 用途:绘制2个数值型变量之间的关系图表 ,包含散点和折线
  2. 参数:
  • x,y : 自定义向量或来自data数据框 分别表示x轴和y轴上的变量
  • hue:自定义向量(长度要和data数据长度一致)或来自data数据框 用于对数据进行分组的列名:例如(不同时间点和共享单车数量关系,分组于不同日期采用不同颜色)
  • size:用于指定散点标志大小 自定义向量或来自data
  • style:用于表示样式 自定义向量或data ,建议不要选择数值型data列建议选择类型特征data列
  • data:传入的数据框
  • kind:散点,线图(scatter,line)
  • col: 以列展示每个类的子图,col=‘sex’,以sex分图展示 每个图是每个sex类 向量或data
  • row:以行展示每个类的子图 向量或data
  • col_waps:指定每行最大列数 若=2,4个子图会展示2行2列
  • markers:bool类型,字典或者list,指定样式 依赖与style中style值,style几个值,markers就几个。

1.1.1 散点可视化

在这里插入图片描述

  • 绘制total_bill 和 tip的关系,以 day 分组 1个图
    注意: 参数data,x,y,hue是图的核心,其他参数大部分用于美观,data是要展示的整体数据框DataFrame,指明data后,x和y就可以直接使用数据框中的列名。若不指明data,x,y需要指明具体数据向量 。
sns.relplot(data=tips, x="total_bill", y="tip", hue="day")
sns.relplot(x=tips['total_bill'],y=tips['tip'],hue=tips['day'])

在这里插入图片描述

  • 绘制total_bill 和 tip的关系,以 day 分组,以time分图表展示 以col(列)分子图展示
    注意:relplot能根据kind实现散点图scatterplot和折线图lineplot的功能,但是relplot支持多个子图展示(col,row),但是没有ax(指定图展示位置)参数。
sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time")

在这里插入图片描述

  • 绘制total_bill 和 tip的关系,以 day 分组,以day分图表展示 展示4列1行,
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',col='day')

在这里插入图片描述

  • 绘制total_bill 和 tip的关系,以 day 分组,以time分列子图,以sex分列子图
    注意:列子图展示: 以col(列)一列一个time类别 ,行子图展示row(行),一行一个sex类别,共(time类别数 × sex类别数)个图
sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time", row="sex")

在这里插入图片描述

  • 指定样式
    注意:style指定可以来自data,每个类别散点样式不一样,有点是圆点,有的是X,size也可以来自数据框中data数据,指定散点大小,通过设置sizes最大最小的气泡 来设置成气泡图形式展示。
# sizes设置气泡最小1,最大300,style根据sex类别设置,hue分组,paletter根据hue类别来标记颜色,注意长度要与hue中分组个数一致
sns.scatterplot(data=tips,x='total_bill',y='tip',hue='time',size=tips['size'] * 100,sizes=(1, 300),style='sex',palette=['b','r'],alpha=0.5)

在这里插入图片描述

1.1.2 折线图可视化

relplot的kind指定散点还是折线,默认是散点。

# kind参数设置成line
sns.relplot(data=fmri, x="timepoint", y="signal", col="region",hue="event", 
    style="event", kind="line")

在这里插入图片描述

1.1 scatterplot

用于绘制两个数值型变量之间的关系,散点图形式展示。注意该绘图函数返回的是matplotlib.axes.Axes(绘图核心:绘图区域,包含一个坐标系和多个绘图元素。),不是FacetGrid,不支持绘制子图。

  1. 用途:绘制2数值型变量之间的散点图
  2. 参数:
  • x,y : 向量或来自data数据框 分别表示x轴和y轴上的变量
  • hue:向量或来自data数据框 用于对数据进行分组的列名:例如(不同时间点和共享单车数量关系,分组于不同日期采用不同颜色)
  • size:用于指定散点标志大小 向量或来自data
  • style:用于表示样式 向量或data
  • data:传入的数据框
  • sizes:设置大小
  • markers:设置形状 dict :x,s,o形状等
  1. 与relplot的区别是没有 col row 子图 返回的不是FacetGrid
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", size="size",sizes=(20, 200))
# 指定markers
markers = {"Lunch": "s", "Dinner": "X"}
sns.scatterplot(data=tips, x="total_bill", y="tip", size='size',hue='time',palette=['b','r'],style="time", markers=markers)

指定markers展示
在这里插入图片描述

1.2 lineplot

返回的是matplotlib.axes.Axes,将返回值保存后,我们可以根据需要进一步设置图中其他元素。

  1. 用途:绘制2变量之间的折线图
  2. 参数:
  • x,y : 向量或来自data数据框 分别表示x轴和y轴上的变量
  • hue:向量或来自data数据框 用于对数据进行分组的列名:例如(不同时间点和共享单车数量关系,分组于不同日期采用不同颜色)
  • size:用于指定散点标志大小 向量或来自data
  • style:用于表示样式 向量或data
  • data:传入的数据框
  • sizes:设置大小
  1. 与relplot的区别是没有 col row 子图 不是FacetGrid,当然还有别的区别,还请自己探索
# 设置折线样式 event,设置分组 region
fmri = sns.load_dataset("fmri")
sns.lineplot(data=fmri, x="timepoint", y="signal", hue="region", style="event")

在这里插入图片描述

1.3 总结

可能有人疑问为啥已经有scatterplot和lineplot函数了,为何还存在relplot函数,我个人认为可能是因为relplot可以绘制子图,根据不同类别展示一个子图,简化代码。如果使用scatterplot展示进行多个类别筛选数据时就需要 先创建好子图,在根据ax定位不同类别的展示在子图中的位置。而relplot直接col row就可以实现,还可以根据col_wraps设置分几列展示col组数据,注意不能和row同时使用。

# relplot只需要一行代码
sns.relplot(data=penguins, x="bill_length_mm",y="bill_depth_mm", hue="species",col='sex')

# 散点图 分组统计 需要好几行代码
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.scatterplot(data=penguins[penguins['sex']=='Female'], x="bill_length_mm",y="bill_depth_mm", hue="species",ax=axes[1])
axes[1].set(title="Female")
sns.scatterplot(data=penguins[penguins['sex']=='Male'], x="bill_length_mm",y="bill_depth_mm", hue="species",ax=axes[0])
axes[0].set(title="Male")

relplot
在这里插入图片描述
scatterplot
在这里插入图片描述

2. displot

用途:绘制单变量或者双变量分布的关系,可以绘制直方图,核密度图,ecdf图,帮助理解数据的分布情况
参数:

  • data:向量或来自data
  • x,y: 向量或来自data
  • hue:data 分组
  • weights:data 权重
  • kind:图标类别,hist,kde,ecdf 默认hist 频率直方图
  • col: 以列展示每个类的子图,col=‘sex’,以sex分图展示 每个图是每个sex类 向量或data
  • row:以行展示每个类的子图 向量或data
  • col_waps:指定每行最大列数 若=2,4个子图会展示2行2列
  • legend:bool值默认false
  • 判断是否正态分布
  • KDE 图通常呈现出钟形曲线,即高峰在中心,两侧逐渐减小
  • ECDF 图应该是一条平滑的、逐渐上升的曲线,没有明显的跳跃或波动。

2.0.1 hist图

displot 当kind=‘hist’ 绘制直方图,x和y都表示变量,单变量分布只需要观察一个x或y

  • 若指定x,则横轴表示变量,纵轴表示频数(count)
  • 若指定y,则纵轴表示变量,横轴表示频数(count)
  • 若同时指定x,y,则显示俩变量分布,类似热力图。
# 指定x
penguins = sns.load_dataset("penguins")
sns.displot(data=penguins, x='body_mass_g',hue='sex')
# 指定y
sns.displot(data=penguins, y='body_mass_g',hue='sex')
# 指定x和y
sns.displot(data=penguins, x='flipper_length_mm',y='body_mass_g',hue='sex')

指定y 展示可以看出xy取值决定图的方向
在这里插入图片描述

2.0.2 kde图

当displot的kind参数取值"kde"时绘制kde图。

  • kde:是一种通过对数据进行平滑处理来估计其概率密度的非参数方法 KDE 在统计学和数据可视化中经常被用来理解数据分布的形状。

  • 核心思想:它的核心思想是在每个数据点的位置上放置一个核(通常是高斯核),然后将这些核叠加起来形成平滑的概率密度估计。

  • KDE概率密度函数 :数学上,对于一组样本数据 (x1,x2,…,xn{x_1, x_2, \ldots, x_n}x1​,x2​,…,xn​), KDE 估计的概率密度函数 (f(x)) 可以表示为:f(x)=1n⋅h∑i=1nK(x−xih)f(x) = \frac{1}{n \cdot h} \sum_{i=1}^{n} K\left(\frac{x - x_i}{h}\right)f(x)=n⋅h1​∑i=1n​K(hx−xi​​) ,其中 (K) 是核函数,通常是一个关于零中心对称的函数,(h) 是带宽(bandwidth),用于控制估计的平滑程度。 在kdeplot中可通过kernel选择核函数,通过bw_adjust参数选择带宽。

  • 概率密度:对于一个连续型随机变量 (X),概率密度函数 (f(x)) 满足以下两个性质:
    1. 概率密度函数 (f(x)) 是非负的:对于所有的 (x),有 (f(x)≥0)(f(x) \geq 0)(f(x)≥0)。
    2. 在整个定义域上的积分等于1:(∫−∞∞f(x),dx=1)(\int_{-\infty}^{\infty} f(x) ,dx = 1)(∫−∞∞​f(x),dx=1)。
    3. 例如:sns.kdeplot(data[“total_bill”], clip=(10, 30)) 只对数据集中落在(10,30)这个范围内的部分数据进行核密度估计

sns.displot(data=penguins, x='body_mass_g',hue='sex',kind='kde')
# 分子图展示
sns.displot(data=penguins, x="flipper_length_mm", hue="species", col="sex", kind="kde")

分子图展示
在这里插入图片描述

2.0.3 ecdf图

ECDF 是经验累积分布函数。
定义: 对于一个样本数据集 ({x_1, x_2, \ldots, x_n}),其 ECDF 是一个阶梯函数,定义如下: [F(x)=1n∑i=1nI(xi≤x)][ F(x) = \frac{1}{n} \sum_{i=1}^{n} I(x_i \leq x) ][F(x)=n1​∑i=1n​I(xi​≤x)]
其中: (F(x)) 是在给定的观测值 (x) 处的 ECDF。 (n) 是样本大小(观测值的总数)。(I(xi≤x))(I(x_i \leq x))(I(xi​≤x)) 是一个指示函数,当 (xi≤x)(x_i \leq x)(xi​≤x) 时为 1,否则为 0。
对于每个观测值 (xi)(x_i)(xi​),(I(xi≤x))(I(x_i \leq x))(I(xi​≤x))是一个二进制值,表示该观测值是否小于或等于 (x)(x)(x)。累积和部分就是对这些二进制值求和,最后除以样本大小 (n)(n)(n)。

sns.displot(
    data=penguins, y="flipper_length_mm", hue="sex", col="species",kind="ecdf", height=4, aspect=.7,)

在这里插入图片描述

1.2 histplot

用途:绘制单变量或者双变量分布的直方图,帮助理解数据的分布情况 参数:

  • data:向量或来自data
  • x,y: 向量或来自data
  • hue:data 分组
  • weights:data 权重
  • binwidth:条形宽度 取值int。调整条形宽度
  • binrange:条形范围
  • bins:条形个数
  • fill:是否为条形填充颜色
  • kde:是否展示核密度线 bool 仅与单变量相关
  • legend:bool值默认false
  • stat:count或sum统计个数或总和
  • element:bars,step,poly 默认bars
  • ax:指定子图位置
  • car_ax:指定cbar位置
# 1 设置观察哪个变量的分布,设置条形个数30,绘制kde曲线
sns.histplot(data=penguins, x="flipper_length_mm",bins=30,kde=True)
# 2 设置分组,指定stack堆叠形式 设置不填充
sns.histplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack",fill=False)
# 3 绘制阶跃函数 
sns.histplot(penguins, x="flipper_length_mm", hue="species", element="step")

# 4 绘制2变量之间的分布,热图
sns.histplot(
penguins, x="bill_length_mm",y='bill_depth_mm',
cbar=True
)

展示第3个:绘制阶跃函数
在这里插入图片描述

1.3 kdeplot

用途:绘制单变量或者双变量分布的核密度,帮助理解数据的分布情况

参数:

  • data:向量或来自data
  • x,y: 向量或来自data
  • hue:data 分组
  • weights:data 权重
  • fill:是否为条形填充颜色
  • legend:bool值默认false
  • ax:指定子图位置
  • car_ax:指定cbar位置
  • common_norm:bool类型, 默认True
  • common_grid:bool类型
# 设置common_norm为False,设置size为分组 可视化total_bill的分布 的density即概率密度
sns.kdeplot(data=tips, x="total_bill", hue="size",fill=True, common_norm=False, palette="crest")

在这里插入图片描述

1.4 ecdfplot

用途:绘制单变量或者双变量分布的ecdf,帮助理解数据的分布情况
参数:

  • data:向量或来自data
  • x,y: 向量或来自data
  • hue:data 分组
  • weights:data 权重
  • stat:count,proportion 其中proportion默认值
# 以species分组 stat统计个数 count
sns.ecdfplot(data=penguins, x="bill_length_mm", hue="species", stat="count")
sns.ecdfplot(data=penguins, x="bill_length_mm", hue="species", stat="proportion")

在这里插入图片描述

3. catplot

作用:绘制分类数据的图,显示数值与一个变量或多个类别之间的关系,可以指定图表类型,kind。当数据集中的特征变量是非数值型变量时可以进行绘制其类别。例如
房屋类别1,2,3对应房屋价格[…] 可以绘制其catplot等各种图。

  • 分类散点图:
  • stripplot:散点图 通常绘制一个分类变量下数值型变量的分布情况
  • swarmplot:不重叠的散点图
  • 分类估计图:
  • pointplot:每个类别的点估计或者置信区间
  • barplot:每个类别的均值(默认),还可以是其他
  • countplot:每个类别的数量
  • 分类分布图:
  • boxplot:箱线图 显示数据的分布,中位数,异常值。
  • violinplot:小提琴图
  • boxenplot:箱线图的扩展
  • 参数
  • data:数据框
  • x,y:data x,y
  • hue:data 分组
  • row,col:data 子图
  • kind:默认散点图。 “strip”, “swarm”, “box”, “violin”, “boxen”, “point”, “bar”, “count”. 其中count显示的是一个类别的计数。
  • estimator:估计每个分类箱内的统计函数
# 查看泰坦尼克号中,class类别中年龄的分布情况,并且以sex分组观察。
sns.catplot(data=df,x='class',y='age',kind='boxen',hue='sex')

# 分层绘制 catplot小提琴图和swarmplot
sns.catplot(data=df, x="age", y="class", kind="violin", color=".9", inner=None)
sns.swarmplot(data=df, x="age", y="class", size=3)

在这里插入图片描述

3.1 barplot

用途:绘制分类变量对应的数值变量的中心趋势(如均值) 参数:
参数:

  • x,y,hue:绘制的x和y指定的数据,其中一个指定类别型变量特征,一个指定数值特征变量,hue指定分组
  • data:数据框
# 当x和y同时数值型变量时 可以看出 histplot更适合(虽然是二维的热图)
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.barplot(data=tips, x="total_bill", y="tip", hue="time",ax=axes[0])
axes[0].set(title="barplot")
sns.histplot(data=tips, x="total_bill", y="tip", hue="time",ax=axes[1])
axes[1].set(title="histplot")


# 当x和y,一个数值型一个类别型 可以看出barplot更适合
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.barplot(data=tips, x='day',y="total_bill", hue="time",ax=axes[0])
axes[0].set(title="barplot")
sns.histplot(data=tips, x='day',y="total_bill", hue="time",ax=axes[1])
axes[1].set(title="histplot")

在这里插入图片描述

3.2 pointplot

3.3 countplot

用途:用于对类别型特征变量的个数统计
参数:

  • x or y,hue:绘制的x和y指定的数据,x和y只是表示类别变量所在的轴,不能同时出现。hue指定分组
  • data:数据框
# 当x是数值型可以看出不适合统计
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.countplot(data=tips, x='day', hue="time",ax=axes[0])
axes[0].set(title="countplot")
sns.countplot(data=tips, x="total_bill", hue="time",ax=axes[1])
axes[1].set(title="countplot")

在这里插入图片描述

3.4 boxplot 和boxenplot

用途:都是绘制箱线图,也是类别和数值变量关系的查看,类别型变量对应的数值型变量分布情况,不同是boxenplot展示的数据范围更多
参数:

  • x,y,hue:绘制的x和y指定的数据,其中一个指定类别型变量特征,一个指定数值特征变量,hue指定分组
  • data:数据框
penguins = sns.load_dataset("titanic")
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.boxplot(data=penguins, x="class", y="age", hue="alive",ax=axes[0])
axes[0].set(title="boxplot")
sns.boxenplot(data=penguins, x="class", y="age", hue="alive",ax=axes[1])
axes[0].set(title="boxenplot")

在这里插入图片描述

3.5 violinplot

用途:绘制小提琴图,也是类别和数值变量关系的查看,类别型变量对应的数值型变量分布情况
参数:

  • x,y,hue:绘制的x和y指定的数据,其中一个指定类别型变量特征,一个指定数值特征变量,hue指定分组
  • data:数据框
  • split:bool True表示不用分隔开,
# 绘制class中的age分布情况,采用split不同的值,查看图表
penguins = sns.load_dataset("titanic")
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.violinplot(data=penguins, x="class", y="age", hue="alive",split=True,ax=axes[0])
sns.violinplot(data=penguins, x="class", y="age", hue="alive",ax=axes[1])

在这里插入图片描述

3.6 striplot

用途:绘制一个类别变量的数值型分布情况,与scatterplot区别scatterplot用于绘制两个数值型变量之间的关系

kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
# 从scatterplot和stripplot绘制中看到,scatterplot看不出数据的分布形态,stripplot更适合观察数值型和类别型变量的分布形态。
sns.stripplot(data=tips, x="day", y="tip", hue="time",ax=axes[0])
axes[0].set(title="stripplot")
sns.scatterplot(data=tips, x="day", y="tip", hue="time",ax=axes[1])
axes[1].set(title="scatterplot")

在这里插入图片描述

# 当x和y都是数值型变量时 可以看出stripplot不适合查看两个数值型散点图,x轴标签都已经重叠
kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.stripplot(data=tips, x="total_bill", y="tip", hue="time",ax=axes[0])
axes[0].set(title="stripplot")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time",ax=axes[1])
axes[1].set(title="scatterplot")

在这里插入图片描述

3.7 swarmplot

散点不会重叠在一起,所有散点都会展示出来。

kw = {'width_ratios':[1,1]}
fig,axes = plt.subplots(1,2,figsize=(16,5),gridspec_kw=kw)
sns.stripplot(data=tips, x="day", y="tip", hue="time",ax=axes[0])
axes[0].set(title="stripplot")
sns.swarmplot(data=tips, x="day", y="tip", hue="time",ax=axes[1])
axes[1].set(title="scatterplot")

在这里插入图片描述

总结:123

关于数据探索中如下:

  1. 数值型数据:
  • 可以采用分布图进行探索其分布特征,displot 包含hist,kde,ecdf ,histplot,kdeplot等
  1. 类别型数据:scatterplot, lineplot,catplot,boxplot
  • 统计个数:count
  • 观察类别中与其他变量之间的关系:
  • 例如:船舱类别中年龄分布
  • 例如:船舱类别和票价分布
  • 例如:日期和共享单车个数分布
  • 例如:时间段中共享单车个数分布以日期分组
  • 例如:不同时间销售额分布:折线,x=time,y=sales

4. rugplot

用途:绘制标签边际分布,旨在使得绘制的图形更加明显 参数:

  • data:向量或来自data
  • x,y: 向量或来自data
  • hue:data 分组
  • height: 高度
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
sns.rugplot(data=tips, x="total_bill", y="tip", hue="time")

在这里插入图片描述

5. implot

用途:绘制线性回归拟合模型的图,散点图上拟合并显示回归线,可绘制多个散点图和线性回归线
参数:

  • data:数据
  • x,y:数值型变量 查看关系
  • hue:分组 data
  • col:子图 data
  • row:子图
  • lowess:内置统计函数 bool
  • logistic:内置统计函数 bool
  • robust:内置统计函数 bool
# implot绘制线性回归拟合曲线,其实就是在散点图上画一条回归线
sns.lmplot(data=penguins, x="bill_length_mm", y="bill_depth_mm", hue="species",col="sex")

在这里插入图片描述

6. regplot

作用:绘制线性回归拟合模型的图,散点图上拟合并显示回归线,绘制单个散点图和线性回归线
参数:

  • data:数据
  • x,y:数值型变量 查看关系
  • 不能绘制多个散点图的拟合,不能分组,也不能分子图
sns.regplot(data=penguins, x="bill_length_mm", y="bill_depth_mm")

在这里插入图片描述

7. residplot

用途:用于绘制残差图的函数。残差图是通过观察实际观测值与模型预测值之间的差异,用于评估模型的拟合程度
参数:

  • data:数据
  • x,y:数值型变量 查看关系
  • lowess:内置统计函数 bool
  • robust:内置统计函数 bool

8. heatmap

用途:将矩形数据,绘制成颜色编码热力图 参数:

  • data:矩阵数据
  • vmin,vmax:颜色图的值
  • cmap:指定颜色空间
  • robust:bool
  • annot:bool 数据展示
  • fmt:数据展示位数
  • annot_kws:设置数据展示,font,size等dict格式
  • cbar:bool 是否展示
  • cbar_ax:指定子图
  • xticklabels:是否显示x标签
  • yticklabels:是否显示y标签
  • mask:遮盖
  • square:bool是否强制将图绘制成正方形
  • ax:指定展示图位置
sns.heatmap(glue, annot=True, fmt=".2f",annot_kws={'fontsize':6},vmin=50,vmax=100)

9. clustermap

用途:用于创建簇图
参数:

  • data:数据
  • cmap:颜色图
  • col_cluster:bool 是否对列进行层次聚类
  • row_cluster: bool 是否对行进行层次聚类
  • method:层次聚类方法:single,compete,average
  • metric:层次聚类的距离度量:euclidean,correlation
  • figsize:图形大小

10. pairplot

用途:绘制数据集中俩变量之间的关系,其中对角线上是单变量分布
参数:

  • data:数据集 绘制的是俩数值型变量之间的关系分布
  • hue:分组
  • kind:scatter,hist,kde,reg 默认scatter
  • 其中reg是 regplot的,拟合散点图的回归线
  • hist 直方图,由于俩变量 展示的是热图
  • scatter:散点图
  • kde:核密度图,由于俩变量展示的是密度图,像压强线
  • diag_kind:设置对角线上图展示
# 绘制data数据中的数值型变量之间的分布关系,reg拟合回归线,并设置map_lower绘制下三角区域
# 采用kdeplot绘制
penguins = sns.load_dataset("penguins")
g = sns.pairplot(data=penguins,kind='reg')
g.map_lower(sns.kdeplot, levels=4, color=".2")

在这里插入图片描述

11. jointplot

用途:绘制2数值型变量之间的分布关系,由于histplot,kdeplot展示观察2个变量之间的关系时绘制成热图或者密度图,很难看出单变量分布情况,jointplot不仅可以看出2变量之间,还在轴上绘制单变量分布情况。
参数:

  • data:数据
  • x,y,hue:来自data列,
  • kind:绘制分布图的类型:hist,kde,scatter,hex,reg 默认scatter ,其中hex,reg不支持分组
# 绘制2变量之间的分布关系,以sex分组,hist格式
sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm",hue='sex',kind='hist')

在这里插入图片描述

12. 总结

  • displot 是histplot,kdeplot,ecdfplot的合并
    可以根据kind选择合适的图表,支持分子图展示(col,row)取值于data列中。探究数值型变量的分布情况
  • catplot是countplot,stripplot,swarmplot,violinplot,boxplot,boxenplot,barplot,pointplot的合并,可以根据kind选择合适的图表,支持分子图展示(col,row)取之于data,探究类别变量和数值型变量之间的分布关系。
  • implot是绘制拟合回归线,可以根据col,row分子图展示不支持ax,regplot也是拟合,但是只能单个变量。支持ax
  • heatplot是热图展示 .pairplot是展示整个数据中数值型变量两两之间的关系
  • joinplot是探究数值型变量2个变量之间的关系时,分别在各自轴上绘制单个变量分布关系。

13. 补充dendrogram

用途:绘制层次聚类图

  • from scipy.cluster.hierarchy import linkage, dendrogram
  • 首先:linkage求层次聚类连接矩阵,dendrogram绘制
    • linkage参数:
      data:二维数值型数据 相关性系数
      mathod:聚类的常用方法:ward,single,complete,average
    • dendrogram参数:
      linkage_matrix:linkage求的聚类连接矩阵
      labels:数据点标签
      leaf_rotation:标签旋转度数
import numpy as np
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
data = np.random.rand(10, 2)

# 计算聚类链接矩阵
linkage_matrix = linkage(data, method='ward')

# 输出聚类链接矩阵
print("聚类链接矩阵:\n", linkage_matrix)

# 绘制 Dendrogram
dendrogram(linkage_matrix)

# 添加标题和标签
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Data Points')
plt.ylabel('Distance')

# 显示图形
plt.show()

在这里插入图片描述

以上来自与seaborn结合自己的理解,若有不足的地方,还请批评指正。不积跬步无以至千里 共勉!

使用seaborn绘制折线图,并使自动图例为中文 通常,我们使用seaborn进行绘图时,需要用到的变量和名称均为英文,然而有部分情况下需要设置图例为中文,而此时可能需要用到中文变量(Python 3支持中文变量,大家可以尝试一下) 以下是seaborn中文图例绘制曲线的代码 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn ... 阅读详情

相关推荐

Python数据可视化实战:用matplotlib和seaborn绘制专业级热图的10个技巧

本文深入探讨了使用Python的matplotlib和seaborn库绘制专业级热图的10个核心技巧。内容涵盖色彩映射的心理学选择、数据注释与掩膜的智能应用、构图布局的精细控制,以及从静态展示到交互式探索的高级定制方法,旨在帮助数据分析师和研究人员将热图从“可用”提升至“卓越”的沟通工具。

weixin_29091837的博客 577

第五章. 可视化数据分析图表—Seaborn图表(折线图,直方图,条形图,散点图)

第五章. 可视化数据分析图表—Seaborn图表, 本节主要介绍折线图,直方图,条形图,散点图。

weixin_45116749的博客 4478

matlab中散点图的线性拟合_Python数据可视化:用Seaborn绘制高端玩家版散点图

↑↑↑点击上方蓝字,回复资料,10个G的惊喜散点图是用于研究两个变量之间关系的经典的和基本的图表。如果数据中有多个组,则可能需要以不同颜色可视化每个组。今天我们画普通散点图、边际分布线性回归散点图、散点图矩阵、带线性回归最佳拟合线的散点图本文示例多是来自官方文档,这里我只是做一下整理,让大家知道散点图的不同玩法,不要再绘制老掉牙的普通玩家版散点图了。普通玩家绘制的散点图在 matplot...

weixin_39955781的博客 1444

Python画折线图之seaborn

import matplotlib.pylab as plt import seaborn as sns import numpy as np np.random.seed(0) my_dpi=96 plt.figure(figsize=(480/my_dpi, 480/my_dpi), dpi=my_dpi) values=np.cumsum(np.random.randn(1000,1)) plt.plot(values) plt.show() import matplotlib.pyla.

weixin_41869644的博客 7966

Python 折线图的绘制(Seaborn篇-04)

`Seaborn`库中通常可以使用`relplot()`方法或`lineplot()`方法来绘制折线图。

侯小啾技术博客 797

Python可视化26|seaborn绘制分面图(seaborn.FacetGrid)

本文介绍seaborn绘制分面图的底层:seaborn.FacetGrid

qq_21478261的博客 2592

python绘制数据可视化图(seaborn+numpy+pandas+matplotlib)

通过简单的matlplotlib第三方库,导入你的数据进行绘制柱状图。## 柱状图 import matplotlib.pyplot as plt import string plt.xlabel('hour') plt.ylabel('time') plt.title('Average number of rides per hour per week') xx = []#存放X值 yy = ...

qq_41883755的博客 3475

攻克TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的四种实战策略

本文详细解析了`TypeError: Cannot read properties of undefined (reading 'NormalModule')`错误的四种实战解决策略。从版本一致性检查、包管理器优化到依赖替换和构建环境配置,帮助开发者快速定位和解决Webpack构建过程中的常见问题,提升开发效率。

weixin_42523670的博客 244

Python数据可视化:Matplotlib、Seaborn、Plotly饼图绘制

本文深入介绍了三个流行的Python数据可视化库:Matplotlib、Seaborn和Plotly,并着重讨论了它们在绘制饼图方面的应用。饼图作为一种简洁而直观的可视化方式,被广泛用于展示数据中各部分的相对比例。通过详细的指南和实例,读者将学会如何使用这三个库创建引人入胜的饼图,无论是数据科学家、分析师还是初学者,都能从中获取实用的信息。这篇文章旨在为读者提供全面的Python数据可视化探索,帮助他们更好地理解和呈现数据。

qq_63087013的博客 5064

SQL-拼多多 面试题:连续3次为球队得分的球员名单

1.使用LAG开窗函数 筛选出 下一次和下下一次得分,并用进球时间进行排序。2.使用where筛选出值得嘉奖的球员。

Ftr1998的博客 644

HALCON实战:用两个工业相机实现无缝大视野拼接(附完整代码与避坑指南)

本文详细介绍了使用HALCON软件实现双工业相机图像无缝拼接的完整解决方案,涵盖硬件配置、相机标定、坐标系转换和图像拼接等关键步骤。通过高精度标定和矩阵变换技术,可构建大视野检测系统,适用于液晶面板、PCB等工业检测场景,显著提升检测效率和精度。

weixin_29050513的博客 191

python线性回归可视化_Python可视化27 | Seaborn绘制线性回归曲线,27seaborn,线型,图

本文详细介绍seaborn绘制变量之间线型回归(linear regression)曲线,涉及如下两个重要函数:seaborn.regplotseaborn.lmplot本文速览目录​1、绘图数据准备依旧使用鸢尾花iris数据集,详细介绍见之前文章。#导入本帖要用到的库,声明如下:import matplotlib.pyplot as pltimport numpy as npimport pan...

weixin_36146057的博客 784

轴承故障诊断——领域知识

幅域分析、频域分析及轴承方面的领域知识

qq_58516607的博客 3535

python 树状图可视化_Python可视化26|seaborn绘制分面图(seaborn.FacetGrid)

"pythonic生物人"的第71篇分享。本文介绍seaborn绘制分面图,即将一个数据集按某类,分行或分列显示为多个子图;前面文章介绍的seaborn.catplot、seaborn.pairplot、seaborn.lmplot生成分面图的底层就是本文的主角seaborn.FacetGrid。seaborn.FacetGrid可更个性化的调整子图的 axis labels, tick...

weixin_39618173的博客 632

【华为OD机试真题】45、 分糖果 | 机试真题+思路参考+代码解析(C++、Java、Py、JS)

### 🎃题目描述 >小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。 >  当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。 >  小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。

正在更新最新华为OD机试2025B卷,提供OJ在线刷题 1290

GaussDB本地安装手册(主备模式)

如果实例状态是Normal,则安装成功。三节点集中式配置文件。

Sebastien23的博客 2638

matlab 在图片上绘制热力图_python可视化之seaborn——热力图

所用函数以及相关参数解析seaborn.heatmap(data,vmin=None,vmax=None,cmap=None,center=None,robust=False,annot=None,fmt=’.2g’,annot_kws=None,l...

weixin_39598135的博客 1810

基于matlab的CNN物体识别物体分类系统

主要对物体进行识别,搭建一个物体分类系统本次实验选择规模稍大的 CIFAR-10 数据集进行分类识别,对应图像的大小设计 VggNet、ResNet 进行网络训练。在实际操作过程中,受限于数据规模和硬件配置,对于大小放缩、批次参数、训练步数等进行了多次调试,这也对以后的图像分类任务具有较高的参考意义,并通过对 CIFAR-10 数据集进行训练和评测,采用网络修改的方式来得到新的 CNN 结构,适用于对网络进行配置、融合等相关研究。读者可以通过自行设计或选择其他网络、加载其他数据等方式进行实验的延伸。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2006

python导入数据画多列直方图_Python数据可视化库seaborn ------ 绘制直方图概率密度曲线;绘制多条曲线;设置主题风格;小提琴图;箱线图;绘制seaborn多个子图;调色板;...

绘制数据的直方图及其概率密度曲线这里可以使用 seaborn.displot() 来绘制,如果指定kde参数为False,就不会画概率密度曲线1 importpandas as pd2 importseaborn as sns3 importmatplotlib.pyplot as plt45 titanic = pd.read_csv('seaborn_test\\train.csv')6 co...

weixin_39946364的博客 718

Ardupilot EKF3核心算法《开篇》

Ardupilot EKF3核心算法本专栏重点,透彻,详细的分析了ardupilot的EKF3,保证是你看到的最完美的EKF3资料,相信你的选择不会错误。网上EKF资料真是太多,说真的没有一篇讲解好的。!!

陌城烟雨 1413

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【数据可视化系列】使用Python和Seaborn绘制相关性热力图

在数据科学领域,了解不同特征之间的相关性是非常重要的。本教程将引导你如何使用Python编程语言和Seaborn库来绘制鸢尾花数据集(Iris dataset)的特征相关性热力图。我们将首先导入所需的库,包括pandas和scikit-learn,然后加载鸢尾花数据集并提取其特征和目标变量。接下来,我们将创建一个数据框来存储这些数据,并使用Seaborn库中的heatmap函数来生成一个可视化的相关性热力图。这个图将帮助我们快速识别数据集中哪些特征之间存在强烈的相关性,从而为进一步的数据分析提供洞见。

2301_81199775的博客 1998

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

目录Python数据处理从零开始----第四章(可视化)①③多变量绘图Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图seaborn.heatmapHeat maps显示数字表格数据,其中单元格根据包含的值着色。 热图非常适合使这种数据的趋势更加明显,特别是在订购数据并且存在聚类时。vmin, vmax : 显示的数据值的最大和最小的范围ax = sns.he...

weixin_39928461的博客 743

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python中使用Matplotlib、Seaborn和Plotly进行折线图绘制

在数据可视化领域,折线图是一种常用的工具,能够清晰展示数据趋势和变化。Python中有多个强大的绘图库,其中Matplotlib、Seaborn和Plotly是备受欢迎的三个模块,提供了丰富的功能和灵活性,使用户能够以多种方式创建漂亮的折线图。 这篇文章将深入介绍如何使用Matplotlib、Seaborn和Plotly这三个库来绘制折线图。首先,我们将学习使用Matplotlib创建基本的折线图,包括如何自定义线条样式、添加标签和标题。接着,我们将探讨Seaborn库,它是建立在Matplotlib之上

qq_63087013的博客 2986

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术,可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法,特别适合于展示变量之间的相关性,对于数据科学和机器学习项目非常有帮助。首先,确保你已经安装了matplotlib和seaborn库。然后,导入必要的库并创建一个示例数据框df_model。

zxwscau的博客 741

python绘制正方形、利用turlr_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

原文:Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图​www.jianshu.comPython数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图seaborn.heatmapHeat maps显示数字表格数据,其中单元格根据包含的值着色。 热图非常适合使这种数据的趋势更加明显,特别是在订购数据并且存在聚类时。vmin, vmax :...

weixin_39601088的博客 165

第二章——数据分析场景之Python数据可视化:用Matplotlib与Seaborn绘制洞察之图

在数据分析的领域中,数据可视化扮演着举足轻重的角色。原始的数据分析结果往往以数字和表格的形式呈现,虽然包含丰富信息,但人们很难从中快速直观地获取关键洞察。可视化报表则如同一位翻译官,将枯燥的数据转化为生动直观的图表,使数据中的模式、趋势和关系一目了然。本部分将深入介绍如何使用Python中的Matplotlib和Seaborn库创建可视化报表。

2501_93253814的博客 1404
上一篇: python合并excel
下一篇: Pandas loc和iloc 以及 pivot和melt详解
snow5618
博客等级 码龄9年 141粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值