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)¶绘制箱线图和核密度估计的组合。
小提琴情节扮演着类似于盒子和胡须情节的角色。它显示了定量数据在一个(或多个)分类变量的多个层次上的分布,以便可以比较这些分布。与盒子图不同,在盒子图中,所有的图组件都对应于实际的数据点,小提琴图的特点是对底层分布的核密度估计。
这是一种同时显示多个数据分布的有效且有吸引力的方法,但请记住,估计过程受样本大小的影响,相对较小样本的小提琴可能看起来过于平滑。
输入数据可以以多种格式传递,包括:
表示为列表、numpy数组或直接传递给 x
, y
和/或 hue
参数。
“长格式”数据帧,在这种情况下 x
, y
和 hue
变量将决定如何绘制数据。
一个“宽格式”数据框,这样每个数字列都将被打印出来。
向量的数组或列表。
在大多数情况下,可以使用numpy或Python对象,但最好使用pandas对象,因为关联的名称将用于注释轴。此外,可以对分组变量使用分类类型来控制绘图元素的顺序。
此函数始终将其中一个变量视为分类变量,并在顺序位置(0,1。。。n) 在相关轴上,即使数据具有数字或日期类型。
见 tutorial 更多信息。
data
或矢量数据,可选中变量的名称用于绘制长格式数据的输入。解释见示例。
用于打印的数据集。如果 x
和 y
不存在,这被解释为广义形式。否则它将是长格式的。
以绘制中的分类级别,否则级别是从数据对象推断出来的。
计算内核带宽时要使用的引用规则的名称或比例因子。实际的内核大小将由比例因子乘以每个箱子内数据的标准偏差来确定。
距离,以带宽大小为单位,将密度扩展到超过极限数据点的距离。设置为0可将小提琴范围限制在观测数据的范围内(即具有与之相同的效果) trim=True
在里面 ggplot
.
用来缩放每把小提琴宽度的方法。如果 area
,每个小提琴都有相同的面积。如果 count
,小提琴的宽度将根据该箱中观察到的数量进行缩放。如果 width
,每把小提琴的宽度相同。
当使用 hue
变量,此参数确定是否在主分组变量的每个级别内计算缩放 (scale_hue=True
)或者穿过情节上所有的小提琴 (scale_hue=False
)
离散网格中用于计算核密度估计的点数。
不使用色调嵌套时完整元素的宽度,或主分组变量的一个级别的所有元素的宽度。
小提琴内部数据点的表示。如果 box
,绘制一个小型箱线图。如果 quartiles
,绘制分布的四分位数。如果 point
或 stick
,显示每个基础数据点。使用 None
会画纯正的小提琴。
当对采用两个级别的变量使用色调嵌套时,设置 split
为真,我将为每一关画半把小提琴。这样可以更容易直接比较分布。
使用色调嵌套时,元素是否应沿分类轴移动。
绘图的水平方向或垂直方向。这通常是根据输入变量的类型推断出来的,但当两者都存在时,它可以用来解决含糊不清的问题 x
和 y
是数字或打印宽格式数据时。
构成绘图元素的灰色线的宽度。
所有元素的颜色,或渐变调色板的种子。
用于不同级别的 hue
变量。应该是可以解释的东西 color_palette()
,或将色调级别映射到matplotlib颜色的字典。
以原始饱和度的比例绘制颜色。大的补丁通常看起来更好,稍微去饱和的颜色,但设置这个 1
如果希望打印颜色与输入颜色规范完全匹配。
轴对象,否则使用当前轴。
返回绘制了绘图的轴对象。
参见
实例
绘制单个水平violinplot:
>>> import seaborn as sns
>>> sns.set_theme(style="whitegrid")
>>> tips = sns.load_dataset("tips")
>>> ax = sns.violinplot(x=tips["total_bill"])
绘制按分类变量分组的垂直violinplot:
>>> ax = sns.violinplot(x="day", y="total_bill", data=tips)
通过两个分类变量嵌套分组绘制violinplot:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="smoker",
... data=tips, palette="muted")
绘制拆分小提琴以比较色调变量之间的差异:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="smoker",
... data=tips, palette="muted", split=True)
通过传递显式命令来控制命令:
>>> ax = sns.violinplot(x="time", y="tip", data=tips,
... order=["Dinner", "Lunch"])
按每个箱子中的观察次数缩放小提琴宽度:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="sex",
... data=tips, palette="Set2", split=True,
... scale="count")
将四分位数绘制为水平线,而不是小方框:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="sex",
... data=tips, palette="Set2", split=True,
... scale="count", inner="quartile")
用小提琴内部的一根棍子展示每个观察结果:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="sex",
... data=tips, palette="Set2", split=True,
... scale="count", inner="stick")
相对于所有箱子的计数缩放密度:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="sex",
... data=tips, palette="Set2", split=True,
... scale="count", inner="stick", scale_hue=False)
使用窄带宽来减少平滑量:
>>> ax = sns.violinplot(x="day", y="total_bill", hue="sex",
... data=tips, palette="Set2", split=True,
... scale="count", inner="stick",
... scale_hue=False, bw=.2)
画水平小提琴:
>>> planets = sns.load_dataset("planets")
>>> ax = sns.violinplot(x="orbital_period", y="method",
... data=planets[planets.orbital_period < 1000],
... scale="width", palette="Set3")
不要让密度超过数据中的极值:
>>> ax = sns.violinplot(x="orbital_period", y="method",
... data=planets[planets.orbital_period < 1000],
... cut=0, scale="width", palette="Set3")
使用 hue
在不改变小提琴位置或宽度的情况下:
>>> tips["weekend"] = tips["day"].isin(["Sat", "Sun"])
>>> ax = sns.violinplot(x="day", y="total_bill", hue="weekend",
... data=tips, dodge=False)
使用 catplot()
合并 violinplot()
和A FacetGrid
. 这允许在其他分类变量中进行分组。使用 catplot()
比使用更安全 FacetGrid
直接,因为它确保了跨方面的可变顺序的同步:
>>> g = sns.catplot(x="sex", y="total_bill",
... hue="smoker", col="time",
... data=tips, kind="violin", split=True,
... height=4, aspect=.7);