小提琴图(violinplot())和箱线图(boxplot())有什么区别?
在这篇文章中,我们将学习如何使用 Python 区分小提琴图(violinplot())和箱线图(boxplot())。
什么是小提琴图?
小提琴图是一种统计图表,类似于箱线图,但在每侧都带有旋转的核密度图。 “小提琴图”这个名称来源于图表形状类似于小提琴的形状。
小提琴图用于可视化数据集的分布,并显示数据在不同值处的概率密度。小提琴图显示样本的数据分布,其中最厚的部分显示值最集中的位置。相反,较细的部分显示值较不集中的位置。
什么是箱线图?
箱线图显示了一个或多个组的数值变量的分布。虽然它隐藏了单个数据集的数据点,但它可以轻松访问中位数、四分位数和异常值。Seaborn 库的 boxplot 函数使在 Python 中创建箱线图变得容易。
箱线图只能表示如此多的信息,但它们更容易理解,尤其是在比较不同组时。虽然密度曲线更难理解且视觉上更嘈杂,但密度曲线都是关于显示分布信息的。但是,当集成到小提琴图中时,两者相互增强以产生尽可能好的结果。
boxplot() 方法需要以下语法:
matplotlib.pyplot.boxplot(data, notch, vert, patch_artist, widths)
小提琴图 |
箱线图 |
---|---|
以下是小提琴图的关键要素以及如何解释它们: 小提琴形状 - 小提琴形状是数据直方图的平滑版本,它显示了数据在不同值处的概率密度。小提琴最宽的部分表示数据点密度最高的地方。小提琴的较细部分表示数据点密度较低。 小提琴内部的箱体 - 小提琴图内部的箱体表示数据集的四分位数。箱体的顶部和底部分别是上四分位数和下四分位数。箱体中间的线是数据的中位数。该框还显示任何异常值,作为须线外部的单个点。 小提琴内部的“线”(如果存在) - 小提琴内部的线表示原始数据点。它提供了数据点实际分布的感觉。 小提琴的宽度 - 小提琴的宽度表示样本大小。较宽的小提琴表示较大的样本大小,反之亦然。 |
箱线图通常使用 matplotlib 库的 boxplot() 函数创建。 箱线图通过 numpy.random.normal() 方法生成随机数据。均值、标准差和所需值数量用作其参数。 ax.boxplot() 函数的数据值可以是 NumPy 中的数组数组、Python 中的数组列表或数组元组。 |
使用 Seaborn 创建小提琴图 一个名为 Seaborn 的 Python 包使得创建更高级的图表变得简单。由于其 violin 函数,它非常适合创建密度图。您可以按照以下图表进行操作,从一个非常简单的小提琴图到更专业的图表。 |
|
使用小提琴图的最佳实践 考虑组的顺序。 当没有内在排序时,可以更改小提琴图中绘制组的顺序,这可以帮助您更多地了解数据。例如,根据组的中位数对组进行排序可以阐明它们的顺序。 |
|
垂直与水平小提琴图 小提琴图可以是垂直的或水平的。两者之间的主要区别在于图表的方位。 垂直小提琴图是一种更常见的类型,它以 x 轴作为被测量的变量,y 轴作为数据的频率或概率密度进行绘制。小提琴形状垂直绘制,其中小提琴最宽的部分表示数据点密度最高的地方。 另一方面,水平小提琴图以 y 轴作为被测量的变量,x 轴作为频率或概率密度进行绘制。小提琴形状水平绘制,其中小提琴最宽的部分表示数据点密度最高的地方。 将小提琴图绘制为垂直或水平的选择取决于您的特定用例和您正在处理的数据。通常,垂直小提琴图更常见,并且使用频率更高,但在某些情况下,水平小提琴图可能更有助于显示比较。 |
基本水平箱线图
import plotly.graph_objects as go import numpy as np x0 = np.random.randn(50) x1 = np.random.randn(50) + 2 # shift mean fig = go.Figure() # Use x instead of y argument for horizontal plot fig.add_trace(go.Box(x=x0)) fig.add_trace(go.Box(x=x1)) fig.show()
箱线图大小
可以使用 width 参数更改各个箱线图的大小。默认宽度为 1,因此任何小于该值的宽度都会为框创建较小的宽度。
import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris') df.head() sns.boxplot( x=df["species"], y=df["sepal_length"], width=0.3); plt.show()
结论
由于配置内核和带宽的难度增加,小提琴图不如箱线图等替代图流行。此外,它在视觉上可能令人分心,尤其是在叠加图表类型时。如果您需要制作图表以向不熟悉小提琴图的群体展示结果,请考虑使用更简单、更直接的表示形式,例如箱线图。
箱线图是一种未充分利用的技术,可以将大量与数据相关的信息浓缩到一个可视化中。在进行探索性数据分析 (EDA) 时,箱线图可以成为直方图的绝佳补充。Matplotlib 是最早的 Python 可视化工具之一,它提供了大量图形和图表以进行更好的分析。