【Python画图-驯化seaborn】一文搞懂seaborn中的小提琴图实践、技巧、原理

【Python画图-驯化seaborn】一文搞懂seaborn中的小提琴图实践、技巧、原理

 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🎯 1. 基本介绍

  小提琴图(Violin Plot)是一种用于展示数据分布的图表,它结合了箱线图的特点和密度图的连续性。这种图表可以展示数据的密度估计,从而提供关于数据分布形状和集中趋势的直观信息。
  小提琴图其实是箱线图与核密度图的结合,箱线图展示了分位数的位置,小提琴图则展示了任意位置的密度,通过小提琴图可以知道哪些位置的密度较高。在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计(在概率论中用来估计未知的密度函数,属于非参数检验方法之一)。

💡 2. 原理介绍

  小提琴图背后的主要思想是使用核密度估计(KDE)来展示数据的分布。核密度估计是一种估计概率密度函数的方法,其公式如下:
f ( x ) = 1 n h ∑ i = 1 n K ( x − x i h ) f(x)=\frac{1}{nh}\sum_{i=1}^{n}K(\frac{x-x_i}{h}) f(x)=nh1i=1nK(hxxi)
  其中:

  • f(x)是在点 x 处的密度估计。
    n 是样本大小。
    h 是带宽(Kernel width)。
    K 是核函数,常用的核函数有高斯核、均匀核等。
    x i x_i xi是样本数据点。

🔍 3. 画图实践

3.1 数据准备

   我们通过seaborn自带的数据对其进行相关的画图,具体的导入数据代码如下所示:

import seaborn as sns
import matplotlib.pyplot as plt

# 使用Seaborn内置的tips数据集
tips = sns.load_dataset("tips")

	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
...	...	...	...	...	...	...	...
239	29.03	5.92	Male	No	Sat	Dinner	3
240	27.18	2.00	Female	Yes	Sat	Dinner	2
241	22.67	2.00	Male	Yes	Sat	Dinner	2
242	17.82	1.75	Male	No	Sat	Dinner	2
243	18.78	3.00	Female	No	Thur	Dinner	2

3.2 单维画图

   在画小提琴图时,我们取单个维度指定方向即可,具体的代码如下所示:

import seaborn as sns
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
# 绘制小提琴图
ax = sns.violinplot(x=tips["total_bill"])

在这里插入图片描述

3.3 分组画图

   有时候我们需要对多个维度的分布进行对比分析,这个时候需要分组画图,具体的代码如下所示:

# 分组的小提琴图,同上面的箱线图一样通过X轴分组
ax = sns.violinplot(x="day", y="total_bill", data=tips)

在这里插入图片描述

  有时候我们不仅要分组,同时对每个分组内某个特征维度进行对比分析,具体的代码如下所示:

# 通过hue分组的小提琴图,相当于分组之后又分组
ax = sns.violinplot(x="day", y="total_bill", hue="smoker",
                        data=tips, palette="muted")

在这里插入图片描述

4 高阶用法

   有时候我们需要指定画图出现的顺序,具体的代码如下所示:

# 调整x轴顺序,同样通过order参数
ax = sns.violinplot(x="time", y="tip", data=tips,
                    order=["Dinner", "Lunch"])

在这里插入图片描述

🔍 5. 注意事项

  • 小提琴图非常适合于比较不同组数据的分布情况,尤其是当数据集较大时。
  • 核密度估计的带宽(bw)选择对图表的形状有很大影响,过小或过大的带宽可能导致误导。
  • 小提琴图可以与箱线图结合使用,以提供更多关于数据集中趋势和离散程度的信息。

🔍 6. 总结

  Seaborn的小提琴图是一种展示数据分布的强大工具,它结合了箱线图和密度图的优点。通过本博客的代码示例,我们学习了如何使用Seaborn绘制小提琴图,并展示了如何通过小提琴图探索不同类别数据的分布特征。希望这篇博客能够帮助你更好地利用小提琴图进行数据探索和分析。

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用seaborn绘制小提琴时,可以通过`sns.violinplot()`函数的参数来控制各个元素的样式和布局。下面是一些常用的参数: - `x`, `y`: 指定数据的横纵坐标,可以是DataFrame或Series的列名,也可以是numpy数组。 - `hue`: 按照某个分类变量对数据进行分组,并用不同颜色的小提琴表示不同组别的数据。 - `data`: 指定数据源,可以是DataFrame或Series。 - `split`: 是否将小提琴分成两半,分别表示两个分类变量的数据。默认为False。 - `inner`: 小提琴内部的样式,可以是“box”,“quartile”,“point”和“stick”的一种。默认为“box”,表示绘制小提琴位数和四分位数范围。 - `scale`: 小提琴的宽度缩放因子,可以是“area”,“count”,“width”的一种。默认为“area”,表示根据样本数量自适应调整小提琴的宽度。 - `bw`: 控制内核密度估计的带宽大小。默认为"scott",可选值有"scott"、"silverman"和float类型的数值。 - `cut`: 控制小提琴的截断方式,可以是numpy.percentile的参数或者是一个浮点数。默认为None,表示不截断。 - `color`: 小提琴的颜色。 - `palette`: 用于绘制分类变量的小提琴的颜色调色板。 - `linewidth`: 小提琴边缘线宽度。 - `width`: 小提琴的宽度。 - `outer`: 是否在小提琴外部绘制观测值的分布。 - `inner_c`: 小提琴内部的颜色。 - `ax`: 用于绘制小提琴的matplotlib子对象。 使用这些参数可以灵活控制小提琴的样式和布局。例如,可以通过以下代码绘制一个带有两个分类变量和观测值散点小提琴: ```python import seaborn as sns import matplotlib.pyplot as plt tips = sns.load_dataset("tips") sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True, inner="stick") sns.swarmplot(x="day", y="total_bill", hue="sex", data=tips, dodge=True, color=".2") plt.show() ``` 输出结果如下所示: ![image.png](attachment:image.png) 在这个例子,我们使用了`tips`数据集的`day`和`total_bill`两个变量,按照`sex`变量进行了分组,并使用`split=True`将小提琴分成了两半。另外,我们使用了`inner="stick"`将小提琴的内部样式设置为“stick”,同时使用`sns.swarmplot()`函数绘制观测值散点,并使用`dodge=True`将散点按照`hue`变量进行了分组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法驯化师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值