首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分布(四)利用python绘制小提琴图

分布(四)利用python绘制小提琴图

作者头像
HsuHeinrich
发布于 2024-03-06 05:39:21
发布于 2024-03-06 05:39:21
67900
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:0
代码可运行

分布(四)利用python绘制小提琴图

小提琴图 (Violin plot)简介

小提琴图主要用于显示数据分布及其概率密度。中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间(以外则为异常点),而白点则为中位数。小提琴图结合了箱线图和密度图的优点,既可以了解数据统计信息,也可以了解数据分布特点。

快速绘制

1、基于seaborn

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="darkgrid")

# 导入数据
df = sns.load_dataset('iris')

# 利用violinplot函数绘制小提琴图
sns.violinplot(x=df["species"], y=df["sepal_length"])

plt.show()

2、定制多样化的小提琴图

自定义小提琴图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

seaborn主要利用violinplot绘制小提琴图,可以通过seaborn.violinplot[1]了解更多用法

  1. 绘制多个小提琴图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(font='SimHei', font_scale=0.8, style="darkgrid") # 解决Seaborn中文显示问题

# 导入数据
df = sns.load_dataset('iris')
df_tips = sns.load_dataset('tips')

fig, ax = plt.subplots(1,3, figsize=(12,4))

# 多个数值变量的小提琴图
sns.violinplot(data=df.iloc[:,0:2], ax=ax[0])
ax[0].set_title('多个数值变量')

# 一个数值变量多个分组的小提琴图
sns.violinplot( x=df["species"], y=df["sepal_length"], ax=ax[1] )
ax[1].set_title('一个数值变量多个分组')

# 一个数值变量多个分组子分组的小提琴图
sns.violinplot(x="day", y="total_bill", hue="smoker", data=df_tips, palette="Pastel1", ax=ax[2])
ax[2].set_title('一个数值变量多个分组/子分组')

plt.tight_layout()
plt.show()

3、自定义小提琴图

自定义形状

代码语言:text
AI代码解释
复制
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(font='SimHei', font_scale=0.8, style="darkgrid") # 解决Seaborn中文显示问题

# 导入数据
df = sns.load_dataset('iris')

# 构造子图
fig, ax = plt.subplots(1,3,constrained_layout=True, figsize=(12, 4))

# 自定义线宽
ax_sub = sns.violinplot(x=df["species"], y=df["sepal_length"], linewidth=5, ax=ax[0])
ax_sub.set_title('自定义线宽')

# 自定义宽度
ax_sub = sns.violinplot(x=df["species"], y=df["sepal_length"], width=0.3, ax=ax[1])
ax_sub.set_title('自定义宽度')

# 自定义方向
ax_sub = sns.violinplot(y=df["species"], x=df["sepal_length"], ax=ax[2])
ax_sub.set_title('自定义方向')

plt.show()

4、自定义颜色

代码语言:text
AI代码解释
复制
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(font='SimHei', font_scale=0.8, style="darkgrid") # 解决Seaborn中文显示问题

# 导入数据
df = sns.load_dataset('iris')

# 构造子图
fig, ax = plt.subplots(1,4,constrained_layout=True, figsize=(12, 4))

# 分配调色板
ax_sub = sns.violinplot(x=df["species"], y=df["sepal_length"], palette="Blues", ax=ax[0])
ax_sub.set_title('分配调色板')

# 统一颜色
ax_sub = sns.violinplot(x=df["species"], y=df["sepal_length"], color='skyblue', ax=ax[1])
ax_sub.set_title('统一颜色')

# 指定颜色
my_pal = {"versicolor": "g", "setosa": "b", "virginica":"m"}
ax_sub = sns.violinplot(x=df["species"], y=df["sepal_length"], palette=my_pal, ax=ax[2])
ax_sub.set_title('指定颜色')

# 突出颜色:针对指定组
my_pal = {species: "r" if species == "versicolor" else "b" for species in df.species.unique()}
ax_sub = sns.violinplot(x=df["species"], y=df["sepal_length"], palette=my_pal, ax=ax[3])
ax_sub.set_title('突出颜色')

plt.show()

5、自定义顺序

代码语言:text
AI代码解释
复制
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(font='SimHei', font_scale=0.8, style="darkgrid") # 解决Seaborn中文显示问题

# 导入数据
df = sns.load_dataset('iris')

# 构造子图
fig, ax = plt.subplots(1,2,constrained_layout=True, figsize=(8, 4))

# 自定义顺序
ax_sub = sns.violinplot(x='species', y='sepal_length', data=df, order=["versicolor", "virginica", "setosa"], ax=ax[0])
ax_sub.set_title('指定顺序')

# 按统计量降序:中位数
my_order = df.groupby(by=["species"])["sepal_length"].median().iloc[::-1].index
ax_sub = sns.violinplot(x='species', y='sepal_length', data=df, order=my_order, ax=ax[1])
ax_sub.set_title('中位数降序')

plt.show()

6、添加额外数据信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加数据点-蜂窝数据(避免某分组数据过少导致误判)

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(font='SimHei', font_scale=0.8, style="darkgrid") # 解决Seaborn中文显示问题

# 导入数据
data = pd.read_csv('https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/sqa_data.csv')

# 自定义颜色
swarmplot_palette = {'Sqa_par':'#8f96bf', 'Sqa_bif':'#ebb0e5', 'Sqa_zz':'#9feed3'}
violin_palette = {'Sqa_par':'#333c70', 'Sqa_bif':'#90367c', 'Sqa_zz':'#34906c'}

# 初始化
sns.set_context('notebook', font_scale=1.2)
fig, ax = plt.subplots(figsize=(9,5))

# 绘制小提琴图
ax = sns.violinplot(y="dist", 
                    x="name", 
                    data=data,
                    palette=violin_palette,
                    scale='count',
                    inner=None
              )

# 绘制蜂窝图
ax = sns.swarmplot(y="dist",
                   x="name",
                   hue="name",
                   data=data, 
                   color="white", 
                   edgecolor="gray",
                   s=5,
                   palette=swarmplot_palette
             )

# 修改标题等信息
ax.set_xticks([0, 1, 2], ['Parallel','Bifurcated','Zig-zag'])
ax.set_xlabel('Squaramide CCSD systems')
ax.set_ylabel(r'$HB distance\ (\AA)$')
plt.ylim(1.5, 3.5)

plt.show()

7、总结

以上通过seaborn的violinplot可以快速绘制小提琴图,并通过修改参数或者辅以其他绘图知识自定义各种各样的小提琴图来适应相关使用场景。

共勉~

参考资料

[1]

seaborn.violinplot: https://seaborn.pydata.org/generated/seaborn.violinplot.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布(三)利用python绘制箱线图
箱线图也叫盒须图,主要用来突出显示数据分布的四分位数。同时也可以获取较多的统计信息,例如:四分位数、异常值、分布是否倾斜/对称等。
HsuHeinrich
2024/02/27
7080
分布(三)利用python绘制箱线图
seaborn可视化入门
【小提琴图】其实是【箱线图】与【核密度图】的结合,【箱线图】展示了分位数的位置,【小提琴图】则展示了任意位置的密度,通过【小提琴图】可以知道哪些位置的密度较高。 小提琴图的内部是箱线图(有的图中位数会用白点表示,但归根结底都是箱线图的变化);外部包裹的就是核密度图,某区域图形面积越大,某个值附近分布的概率越大。 通过箱线图,可以查看有关数据的基本分布信息,例如中位数,平均值,四分位数,以及最大值和最小值,但不会显示数据在整个范围内的分布。如果数据的分布有多个峰值(也就是数据分布极其不均匀),那么箱线图就无法展现这一信息,这时候小提琴图的优势就展现出来了!
IT从业者张某某
2022/11/12
1K0
seaborn可视化入门
​python单细胞学习笔记-day4(续)
相比传统的for循环,列表推导式更加简洁和易读,可以把结果直接保存为列表或者是字典
生信技能树
2025/01/22
1590
​python单细胞学习笔记-day4(续)
Python数据处理从零开始----第四章(可视化)(16)一文解决小提琴图violin plot
(1)输入数据 所使用的是经典的iris数据, 包括有sepal_length, sepal_width, petal_length,petal_width和 species五个变量,其中前四个为数字变量,最后一个为分类变量 import seaborn as sns df = sns.load_dataset('iris') df.head() Out[25]: sepal_length sepal_width petal_length petal_width species 0
用户1359560
2020/02/18
8860
Python数据处理从零开始----第四章(可视化)(16)一文解决小提琴图violin plot
seaborn 简单小提琴图示例
码农GT038527
2025/07/02
640
seaborn 简单小提琴图示例
分布(二)利用python绘制密度图
密度图用于显示数据在连续数值(或时间段)的分布状况,是直方图的变种。由于密度图不受所使用分组数量的影响,所以能更好地界定分布形状。
HsuHeinrich
2024/02/27
4450
分布(二)利用python绘制密度图
数据可视化(11)-Seaborn系列 | 小提琴图violinplot()
小提琴形图(violin plot)的作用与盒形图(box plot)和whidker plot的作用类似,它显示了一个或多个分类变量的几个级别的定量数据的分布,我们可以通过观察来比较这些分布。与盒形图不同,因为盒形图的所有绘图组件都对应于实际数据点,小提琴形图具有底层分布的核密度估计。
数据分析可视化
2019/10/02
13.8K0
数据可视化(11)-Seaborn系列 | 小提琴图violinplot()
Python数据处理从零开始----第四章(可视化)(17)一文解决箱型图box plot
Boxplot是对数据分布进行可视化的绝佳方法。但是,请注意,箱型图可以隐藏单个数据的值。因此,强烈建议在箱线图中显示所有观察结果值。而如果有许多观察结果,小提琴图可能是一个有趣的选择。 (15)在箱型图上添加数据点
用户1359560
2020/02/18
1.1K0
Python数据处理从零开始----第四章(可视化)(17)一文解决箱型图box plot
小白也能看懂的seaborn入门示例
Seaborn就是让困难的东西更加简单。它是针对统计绘图的,一般来说,能满足数据分析90%的绘图需求。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,应该把Seaborn视为matplotlib的补充,而不是替代物。
1480
2019/11/07
4.9K0
小白也能看懂的seaborn入门示例
Seaborn入门(三): 实现Violinplots
seaborn.violinplot基本参数为: violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, width=0.8, inner='box', split=False, dodge=True, orient=None, linewidth=None, color=None, palette=None, saturation=0.75, ax=None, **kwargs)
生信编程日常
2020/04/01
7610
Seaborn入门(三): 实现Violinplots
Seaborn从零开始学习教程(四)
数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类目型的数据类型了,常见的比如人的性别,学历,爱好等。这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。
Python数据科学
2018/08/06
1.9K0
Seaborn从零开始学习教程(四)
分布(一)利用python绘制直方图
直方图主要用来显示在连续间隔(或时间段)的数据分布,每个条形表示每个间隔(或时间段)的频率,直方图的总面积等于数据总量。
HsuHeinrich
2024/02/17
6500
分布(一)利用python绘制直方图
关系(二)利用python绘制热图
seaborn主要利用heatmap绘制热图,可以通过seaborn.heatmap[1]了解更多用法
HsuHeinrich
2024/04/11
5010
关系(二)利用python绘制热图
软件测试|使用Python绘制小提琴图
小提琴图(Violin Plot)是一种数据可视化工具,用于展示数据分布的密度和分布情况。它通常用于比较不同组或类别的数据分布。在Python中,我们可以使用seaborn库来轻松绘制小提琴图。本文将详细介绍如何创建小提琴图,并提供示例以帮助您更好地理解。
霍格沃兹测试开发Muller老师
2023/11/13
2820
软件测试|使用Python绘制小提琴图
我用Python的Seaborn库,绘制了15个超好看图表!
Seaborn是一个基于Python语言的数据可视化库,它能够创建高度吸引人的可视化图表。
小F
2023/08/21
1.2K0
我用Python的Seaborn库,绘制了15个超好看图表!
几个好看的Seaborn图样~(虽然官方配色一般般,但我还是忍不住夸它)
Seaborn是基于matplotlib的图形可视化python包。你只要知道这个就好了。你见过的很多高端图都是出自它的手笔,比如相关系数热度图!很传统,也很棒!
一个有趣的灵魂W
2020/09/15
2K0
几个好看的Seaborn图样~(虽然官方配色一般般,但我还是忍不住夸它)
Python 可视化实战:用 Matplotlib + Seaborn 打造专业级图表仪表盘
本篇文章重点讲解:Matplotlib + Seaborn,通过基础到实战构建出一个完整的数据分析图表仪表盘。
用户11690571
2025/06/10
2780
Python matplotlib绘制列表数据的小提琴图
  本文介绍基于Python中matplotlib模块与seaborn模块,利用多个列表中的数据,绘制小提琴图(Violin Plot)的方法。
疯狂学习GIS
2023/06/26
4780
Python matplotlib绘制列表数据的小提琴图
数据可视化(9)-Seaborn系列 | 分簇散点图swarmplot()
该函数类似于stripplot(),但该函数可以对点进行一些调整,使得数据点不重叠。
数据分析可视化
2019/10/02
4.4K0
数据可视化(9)-Seaborn系列 | 分簇散点图swarmplot()
python可视化之seaborn
数据可视化的文章我很久之前就打算写了,因为最近用Python做项目比较多,于是就花时间读了seaborn的文档,写下了这篇。 数据可视化在数据挖掘中是一个很重要的部分,将数据用图表形式展示可以很直观地看到数据集的特点(比如正态分布,长尾分布,聚集等),方便下一步怎么对数据进行处理。
vincentbbli
2021/08/18
2.6K0
推荐阅读
相关推荐
分布(三)利用python绘制箱线图
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验