数据可视化(11)-Seaborn系列 | 小提琴图violinplot()

小提琴图

该函数是用来绘制箱形图和核密度估计组合图。

小提琴形图(violin plot)的作用与盒形图(box plot)和whidker plot的作用类似,它显示了一个或多个分类变量的几个级别的定量数据的分布,我们可以通过观察来比较这些分布。与盒形图不同,因为盒形图的所有绘图组件都对应于实际数据点,小提琴形图具有底层分布的核密度估计。

函数原型

seaborn.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)

参数解读

表1
输入数据可以通过多种格式传递:
list、numpy数组、pandas
long-form DataFrame
wide-form DataFrame
在大多数情况下,可以使用numpy或Python对象,
但推荐使用pandas对象,因为关联的名称将用于注释轴。
此外,使用分类类型来分组变量来控制绘图元素的顺序。

可选:
x,y,hue:数据字段变量名(如上表,date,name,age,sex为数据字段变量名)
用于绘制数据的输入

data: DataFrame,数组或数组列表
用于绘图的数据集,如果x和y不存在,则将其解释为 wide-form,否则它被认为是 long-form

order, hue_order:字符串列表
指定绘制分类级别,否则从数据对象推断级别

bw:{'scott','silverman',float}
计算内核带宽时使用的引用规则的名称或比例因子。
实际内核大小将通过将比例因子乘以每个bin中数据的标准差来确定。

cut:float
以带宽大小为单位的距离,用于将密度扩展到超过极端数据点。
设置为0可将小提琴范围限制在观测数据范围内
(即,与ggplot中的trim=true具有相同的效果)。

scale:{“area”,“count”,“width”}
用于缩放每个小提琴宽度。如果是区域,每个小提琴都会有相同的区域。
如果计数,小提琴的宽度将按照该箱中的观察次数进行缩放。
如果宽度,每个小提琴将具有相同的宽度

gridsize:int
用于计算核密度估计的离散网格中的点数

inner:{'box','quartile','point','stick',None}
表示小提琴内部的数据点。如果是框,画一个微型箱图。
如果是四分位数,则绘制分布的四分位数。如果point或stick,
则显示每个基础数据点。使用None将绘制未经修饰的小提琴

split : bool
当使用带有两个级别的变量的色调嵌套时,
将split设置为True将为每个级别绘制一半小提琴。这样可以更容易比较分布。

orient: v | h
图的显示方向(垂直或水平,即横向或纵向),
这通常可以从输入变量的dtype推断得到

linewidth:float
构图元素的灰线宽度。

palette:调色板名称,list列表,dict字典
用于对变量调不同级别的颜色

saturation(饱和度):float
用于绘制颜色的原始饱和度的比例,如果希望绘图颜色与输入颜色规格完美匹配,
则将其设置为1

dodge:bool
使用色调嵌套时,是否应沿分类轴移动元素。

案例教程

import seaborn as sns
sns.set(style="whitegrid")
tips = sns.load_dataset("tips")
tips[:5]
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例1:
绘制一个水平的小提琴形图
"""
sns.violinplot(x=tips['total_bill'])
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例2:
绘制一个按分类变量分组的垂直小提琴图
"""
sns.violinplot(x="day", y="total_bill", data=tips)
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例3:
绘制 两类变量进行分组 绘制垂直方向的小提琴图
"""
sns.violinplot(x="day", y="total_bill", 
               hue="smoker",data=tips, palette="muted")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例4:
绘制分割小提琴以比较跨色调变量
"""
sns.violinplot(x="day", y="total_bill", hue="smoker",
               data=tips, palette="muted", split=True)
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例5:
通过设置order来明确指出挑剔亲的顺序
"""
sns.violinplot(x="time", y="tip", 
               data=tips,order=["Dinner", "Lunch"])
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例6:
通过设置scale='count',按每个箱子中的观察次数来缩放小提琴宽度
"""
sns.violinplot(x="day", y="total_bill", hue="sex",
               data=tips, palette="Set2",
               split=True,scale="count")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例7:
将四分位数绘制为水平线
"""
sns.violinplot(x="day", y="total_bill", hue="sex",
               data=tips, palette="Set2", split=True,
               scale="count", inner="quartile")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
tips = sns.load_dataset("tips")
"""
案例8:
使用窄的宽度来减少平滑量
"""
sns.violinplot(x="day", y="total_bill", hue="sex",
               data=tips, palette="Set2", split=True,
               scale="count", inner="stick",
               scale_hue=False, bw=.2)
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
planets = sns.load_dataset("planets")
"""
案例9:
将小提琴图绘制成水平方向上
"""
sns.violinplot(x="orbital_period", y="method",
               data=planets[planets.orbital_period < 1000],
               scale="width", palette="Set3")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
# 读取数据
planets = sns.load_dataset("planets")
"""
案例10:
使用catplot()violinplot()的统计效果,必须设置kind="violin"
当要对其他分类变量进行分组时,使用catplot()比直接使用FacetGrid更加安全
"""
sns.catplot(x="sex", y="total_bill",
            hue="smoker", col="time",
            data=tips, kind="violin", split=True,
            height=4, aspect=.7);

案例地址

案例代码已上传:Github https://github.com/Vambooo/SeabornCN

整理制作:数据分析与可视化学研社

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券