2

数据可视化之小提琴图

 1 year ago
source link: https://www.biaodianfu.com/violin-plot.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

数据, 术→技巧

数据可视化之小提琴图

钱魏Way · 2023-04-12 · 88 次浏览

小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。这种图表结合了箱形图密度图的特征,主要用来显示数据的分布形状。中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。

Violin-Plot.png

在小提琴图中,我们可以获取与箱形图中相同的信息:

  • 中位数(小提琴图上的一个白点)
  • 四分位数范围(小提琴中心的黑色条)。
  • 较低/较高的相邻值(黑色条形图)–分别定义为第一四分位数-1.5IQR和第三四分位数+1.5 IQR。这些值可用于简单的离群值检测技术,即位于这些 “栅栏”之外的值可被视为离群值。
box-plot.png

与箱形图相比,小提琴图毫无疑问的优势在于:除了显示上述的统计数据外,它还显示了数据的整体分布。这个差异点很有意义,特别是在处理多模态数据时,即有多峰值的分布。

小提琴图 (Violin Plot)实现

绘制小提琴图比较方便的是seaborn库。

seaborn.violinplot(data=None, *, x=None, y=None, hue=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)
seaborn.violinplot(data=None, *, x=None, y=None, hue=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)

小提琴图可以是一种单次显示多个数据分布的有效且有吸引力的方式,但请记住,估计过程受样本大小的影响,相对较小样本的小提琴可能看起来非常平滑,这种平滑具有误导性。

参数说明:

  • data:指定想要绘制的数据,可以是Pandas的DataFrame
  • x:指定x轴
  • y:指定y轴
  • hue:指定第二次分类的数据类别(用颜色区分)
  • order:显式指定指定第二次分类顺序
  • hue_order:显式指定分类顺序
  • bw:{‘scott’, ‘silverman’, float},可选。内置变量值或浮点数的比例因子都用来计算核密度的带宽。实际的核大小由比例因子乘以每个分箱内数据的标准差确定。
  • cut:float,可选。以带宽大小为单位的距离,以控制小提琴图外壳延伸超过内部极端数据点的密度。设置为0以将小提琴图范围限制在观察数据的范围内。(例如,在 ggplot 中具有与 trim=True 相同的效果)
  • scale:{“area”, “count”, “width”},可选。该方法用于缩放每张小提琴图的宽度。若为 area ,每张小提琴图具有相同的面积。若为 count ,小提琴的宽度会根据分箱中观察点的数量进行缩放。若为 width ,每张小提琴图具有相同的宽度。
  • scale_hue:bool,可选。当使用色调参数 hue 变量绘制嵌套小提琴图时,该参数决定缩放比例是在主要分组变量(scale_hue=True)的每个级别内还是在图上的所有小提琴图(scale_hue=False)内计算出来的。
  • gridsize:int,可选。用于计算核密度估计的离散网格中的数据点数目。
  • width:float,可选。不使用色调嵌套时的完整元素的宽度,或主要分组变量的一个级别的所有元素的宽度。
  • inner:{“box”, “quartile”, “point”, “stick”, None},可选。控制小提琴图内部数据点的表示。若为box,则绘制一个微型箱型图。若为quartiles,则显示四分位数线。若为point或stick,则显示具体数据点或数据线。使用None则绘制不加修饰的小提琴图。
  • split:bool,可选。当使用带有两种颜色的变量时,将split设置为True则会为每种颜色绘制对应半边小提琴。从而可以更容易直接的比较分布。
  • dodge:bool,可选。使用色调嵌套时,元素是否应沿分类轴移动。
  • orient:“v” | “h”,可选。控制绘图的方向(垂直或水平)。这通常是从输入变量的dtype推断出来的,但是当“分类”变量为数值型或绘制宽格式数据时可用于指定绘图的方向。
  • linewidth:float,可选。构图元素的灰线宽度。
  • color:matplotlib颜色,可选。所有元素的颜色,或渐变调色板的种子颜色。
  • palette:调色板名称,列表或字典,可选。用于hue变量的不同级别的颜色。可以从 color_palette() 得到一些解释,或者将色调级别映射到matplotlib颜色的字典。
  • saturation:float,可选。控制用于绘制颜色的原始饱和度的比例。通常大幅填充在轻微不饱和的颜色下看起来更好,如果您希望绘图颜色与输入颜色规格完美匹配可将其设置为1。
  • ax:matplotlib轴,可选。绘图时使用的Axes轴对象,否则使用当前Axes轴对象。返回值:ax:matplotlib轴。返回Axes对轴象,并在其上绘制绘图。

代码示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_excel("data/price.xlsx")
plt.style.use("ggplot")
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.sans-serif'] = ['SimHei']
sns.boxplot(data=df, x='品类', y='价格', fliersize=0, showmeans=True)
plt.show()
sns.violinplot(data=df, x='品类', y='价格', fliersize=0)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_excel("data/price.xlsx")

plt.style.use("ggplot")
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.sans-serif'] = ['SimHei']

sns.boxplot(data=df, x='品类', y='价格', fliersize=0, showmeans=True)
plt.show()

sns.violinplot(data=df, x='品类', y='价格', fliersize=0)
plt.show()

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK