Python Seaborn 小提琴图

2025 年 5 月 24 日 | 阅读 17 分钟

引言

使用 Seaborn,用户可以创建小提琴图,它结合了箱线图和核密度图的关键元素。该可视化显示了数据集如何随着密度分布和测量中位数和四分位数值的主要统计数据分布。图表的宽度显示了数据密度分布,这使得能够更好地可视化分布形状和类别差异。与标准的箱线图相比,小提琴图通过比较多个组和类别,可以更好地理解数据分布。Seaborn 的设计允许用户轻松创建小提琴图,通过方便的自定义来增强他们的数据分析能力。

语法

参数

x, y, hue:用于绘制长格式数据的输入(数据集中的列名)。

data:用于绘图的数据集。

scale:缩小小提琴宽度的方法。选项包括“area”(默认)、“count”或“width”。

bw:核密度估计的带宽方法(“scott”、“silverman”或浮点数)。

cut:将密度曲线扩展到极端数据点之外(默认值为 2)。

gridsize:用于绘制 KDE 的点数(默认值为 100)。

width:每个小提琴的宽度(默认值为 0.8)。

inner:控制内部元素(如“box”、“quartile”、“point”、“stick”或 None)的显示。

split:如果为 True,则为不同的 hue 值绘制拆分小提琴。

dodge:在使用 hue 参数时分隔小提琴(默认为 True)。

palette:不同 hue 值对应的颜色调色板。

saturation:颜色的饱和度(默认为 0.75)。

linewidth:围绕每个小提琴的线条宽度。

orient:图表方向(“v”表示垂直,“h”表示水平)。

ax:要绘制的 Matplotlib Axes。

使用 violinplot() 对“fmri”数据集进行基本可视化

Seaborn 数据集“fmri”显示了随时间推移的大脑反应测量值,这些测量值按区域和事件类型对数据进行分组。通过使用 violinplot() 函数,可以绘制比较反应时间分布的图表。该图表显示了数据集测量值之间的数据模式以及变异和异常值。小提琴图使得比较实验条件变得容易,因为它将反应值显示在 y 轴上,而时间点显示在 x 轴上。

示例

输出

Violinplot Using Seaborn In Python

说明

“fmri”数据集通过使用 Seaborn 的小提琴图展示了其大脑信号分布。

我们的程序首先导入 Seaborn 和 Matplotlib 以进行绘图。sns.set(style='whitegrid') 命令创建了具有白色背景网格的可读视觉外观。通过执行 sns.load_dataset("fmri") 函数,我们的程序可以访问“fmri”内置数据集。

通过执行 sns.violinplot(x="timepoint", y="signal", data=fmri) 来创建小提琴图。

在此图表中,时间点用作 x 轴 变量,而大脑活动信号值用作 y 轴变量。小提琴图展示了每个时间段的信号值分布和密度,用于比较时间信号变化。最后,plt.show() 显示图表。

根据类别(在此为区域和事件)对数据点进行分组。

通过根据区域和事件类型对数据点进行分类,可以对数据集中不同条件下的分布进行分析。 “fmri”数据集中的每个数据点都包含有关区域(指特定大脑位置)和事件描述(表示实验设置)的信息。可以通过 Seaborn 的 violinplot() 函数实现大脑信号反应变化的 数据可视化。添加 hue 参数可以在同一图表中进行单独的分布比较,从而提高大脑活动在不同区域和事件中的变化清晰度。

示例

输出

Violinplot Using Seaborn In Python

说明

我们检查从 fmri 数据集中检索到的大脑信号的分布模式,该数据集被划分为单独的事件类别。及时导入 Seaborn 和 Matplotlib 允许我们应用 sns.set(style='whitegrid') 来获得干净的背景样式,然后通过 sns.load_dataset("fmri") 加载 fmri 数据集。该函数 sns.violinplot 创建一个显示 x 轴上的时间点、y 轴上的信号,并按 fmri 数据中的事件组分隔的小提琴图(当 split 参数为 True 时)。此图表通过 split=True 为每个小提琴形状显示两个分布,并通过 hue="event" 为每个事件类型使用不同的颜色。该方法演示了不同事件在整个时间点上的信号模式差异。最后,plt.show() 渲染图表。

使用 lineplot() 对“tips”数据集进行基本可视化

Seaborn 的“tips”数据集包含全面的餐厅账单信息,其中包含总账单金额、小费金额、顾客性别、吸烟习惯以及预订日期和时间以及就餐人数等变量。Seaborn 的 lineplot() 函数允许用户描绘数值变量关系并识别模式。您可以使用该数据集的“tips”来评估总账单或小费如何根据就餐人数以及不同的日期、午餐和晚餐时段而变化。市场销售和客户消费模式变得更容易解释,因为线图揭示了连续变量的广泛数据趋势。用户可以通过此可视化来检查平均值并检测选定间隔之间数据序列中的总体趋势。

示例

输出

Violinplot Using Seaborn In Python

说明

Seaborn 库通过其 lineplot() 可视化工具帮助我们评估就餐人数大小变化的总账单金额。我们的数据可视化从导入 Matplotlib 和 Seaborn 库开始。包含餐厅账单信息以及小费金额、就餐人数和日期、时间以及客户数据的 tips 数据集通过 sns.load_dataset("tips") 加载。

您可以通过 sns.lineplot(x="size", y="total_bill", data=tips) 创建折线图,使用 size 作为就餐人数的 x 轴数据测量值,total_bill 作为他们支付账单的 y 轴数据测量值。该图表揭示了变量之间的关系,从而显示了人数较多的聚会会收到更高的账单。最后,plt.show() 显示图表。包含 hue 参数可以比较不同日期或一天中不同时间段的趋势。

使用不同属性在 Seaborn violinplot 中分组变量

使用单个轴绘制单个水平散点图

称为散点图的分类散点图显示单个点而不重叠,因此读者可以看到数据密度和分布。Seaborn 的 swarmplot() 函数允许用户设计垂直和水平图形输出。水平散点图提供了关于单个轴的极佳值分布洞察,支持数据点分析。

创建水平散点图需要使用 x 或 y 参数,具体取决于您选择的轴方向。单一类别图表类型有助于对数据点散布模式和聚集行为进行可视化分析。

下面的代码示例演示了如何使用 tips 数据集创建水平散点图。

示例

输出

Violinplot Using Seaborn In Python

说明

Seaborn 的 swarmplot() 函数使我们能够开发一个水平散点图,该图显示了 tips 数据集中总账单金额的分布。在导入 Seaborn 和 Matplotlib 后,我们开始进行可视化,因为这些库对我们的数据显示需求至关重要。可以通过 sns.load_dataset("tips") 访问 tips 数据集,其中包含总账单、小费、日期、时间以及就餐人数信息。

sns.swarmplot(x="total_bill", data=tips) 函数生成一个图表结构,该图表沿 x 轴显示 total_bill 值。由于我们只提供了 x 参数,因此该图表是水平的,显示数据点散布以避免重叠。视觉呈现揭示了数据点之间的聚集,并检测了与总账单数据中其他值不同的异常数据点。图表显示通过结尾的 plt.show() 命令完成。用户可以通过包括 hue 的附加参数来增强他们的图表,以区分特定类别。

绘制水平小提琴图

称为水平小提琴图的可视化工具结合了箱线图和核密度图的属性,以显示不同类别的数据分布模式。与它们的垂直对应物不同,水平小提琴图在 x 轴上显示数据分布,因此它们与广泛的类别名称或受限的垂直空间配合得更好。Seaborn 的 violinplot() 函数可以通过 x 和 y 参数选择或将 orient 参数设置为“h”来实现这些图表的创建。这种图表设计的视觉风格展示了数据分布特征以及分布范围、中心趋势和数据变异性度量,同时显示隐藏的分布模式。水平小提琴图提供了在多个类别之间评估连续变量变化的卓越能力。

示例

以下是使用 Seaborn 和 tips 数据集创建水平小提琴图的示例

输出

Violinplot Using Seaborn In Python

说明

Seaborn 函数 violinplot() 允许我们创建一个水平小提琴图,显示按日期划分的总账单金额分布(针对提供的数据)。程序开始导入可视化库 Seaborn 和 Matplotlib。通过 sns.load_dataset("tips") 加载包含总账单、小费、日期、时间和就餐人数信息等条目的 tips 数据集。

当提供 x="total_bill", y="day", data=tips, orient="h" 参数时,sns.violinplot 函数生成一个水平小提琴图。该图沿 x 轴呈现 total_bill 测量值,同时在 y 轴上显示 day 值。通过方向参数 "h" 启用水平图表视图。小提琴图中显示了每天的总账单分布以及密度和范围特征,这使得能够进行类别比较。最后,plt.show() 渲染图表。存在额外的措施供用户修改图表外观。

使用 hue 参数

当您在 Seaborn 的绘图函数中使用 hue 参数时,您可以将另一个分类变量添加到您的图中,从而实现增强的组比较。不同的颜色有助于区分子组中的点,从而更好地可视化同一图表中不同组的行为。当 hue 参数用于 violinplot()、barplot() 和 lineplot() 等函数时,它能够实现多个类别之间的明确比较。当引入 hue 参数时,通过明确的视觉区分,我们的视觉模式和相关的变量关系变得更容易看到和理解。

语法

以下是 Seaborn 绘图函数中使用 hue 参数的语法

说明

语法取决于 Seaborn 的绘图函数从数据源渲染视觉效果。Hue 通过类别控制组分隔,其中每个集合都有其唯一的颜色,但 x 和 y 建立轴。数据集通过 data 参数识别,而 kwargs 控制绘图自定义,包括外观和行为参数。

示例

输出

Violinplot Using Seaborn In Python

说明

Seaborn 的 violinplot() 函数允许我们可视化 tips 数据集中按日期划分的总账单金额,并通过 hue 参数按性别进行划分。第一步是导入所需的库,包括 Seaborn 和 Matplotlib,用于数据可视化。包含总账单和小费以及日期、时间和性别信息的 tips 数据集使用 sns.load_dataset("tips") 加载。

此小提琴图显示 x 轴上的日期值与 y 轴上的 total_bill 值,同时使用 hue 参数按性别拆分数据。hue="sex" 参数按性别拆分数据,同时使用不同的颜色显示男性和女性分布点。这种可视化允许研究男性和女性个体之间消费习惯的差异。最后,plt.show() 显示图表。

使用 linewidth 在数据点周围绘制轮廓

Seaborn 的绘图函数使用 linewidth 来控制数据点和绘图组件的边框厚度。调整 linewidth 可以更好地在视觉上区分单个数据点,从而创建更清晰的图表,使类别或组之间的比较更容易。

语法

说明

使用 seaborn.violinplot(x, y, data, linewidth) 绘制小提琴图,并允许用户使用 x 和 y 变量修改其轴,而 data 确定数据集,linewidth 控制轮廓厚度。

示例

输出

Violinplot Using Seaborn In Python

说明

此示例的实现创建了一个 Seaborn 小提琴图,以显示每日小费分布以及为增加可见性而加厚的轮廓。该程序首先导入 Seaborn 以获得可视化美感,以及 Matplotlib 的 pyplot 用于显示图表。seaborn.set 函数中的 style="whitegrid" 参数生成清晰的网格背景,从而提高可读性。

从 seaborn.load_dataset("tips") 加载的 tips 数据集提供了有关总账单、小费、日期、时间以及与餐厅交易相关的各种元素的信息。seaborn.violinplot 函数使用 x 轴上的 day='day',同时显示 'tip' 数据点,并将 linewidth 设置为 4 来创建最终的小提琴图。linewidth=4 值提供了更厚的小提琴轮廓,以增强分布形状的可见性。最后,plt.show() 显示图表。

在主分类轴上的不同位置绘制 hue 变量的每个级别

Seaborn 的分类图包含 dodge 参数,该参数允许 hue 变量的级别在主分类轴上分开显示。dodge 参数的 True 值将 hue 变量的单个类别绘制在彼此相邻的单独轴上,以便用户可以更轻松地检查其个体分布和值。dodge 参数尤其在三种绘图类型中显示其价值:violinplot()、barplot() 和 boxplot(),因为有效的子组比较取决于清晰的视觉表示。许多 Seaborn 可视化使用 dodge 的默认设置为 True。

示例

输出

Violinplot Using Seaborn In Python

说明

使用 Seaborn 的 violinplot() 函数以及 hue 参数,我们可以根据性别探索按日期划分的总账单分布。第一步是导入创建可视化所需的 Seaborn 和 Matplotlib,然后通过 sns.load_dataset("tips") 加载 tips 数据集。此数据集中包含总账单、小费、日期、时间和性别信息。

sns.violinplot 函数生成一个小提琴图,该图显示 y 轴上的总账单金额以及 x 轴上的日期信息,同时使用性别作为 hue 参数进行显示。hue 中的 'sex' 参数区分了男性和女性分布,并使用不同的颜色代码显示他们的数据点。这种 dodge=True 参数的实现将男性和女性分布放置在每个日期上,使它们不重叠,而是并排显示以便于评估。最后,plt.show() 显示图表。

通过传递显式顺序来控制小提琴顺序

通过 Seaborn 的小提琴图中的 order 参数,用户可以根据所需的序列建立哪个分类变量首先显示。默认情况下,类别按其在数据集中存在的顺序显示。order 参数允许定义单个序列,以使比较更清晰或突出显示某些方面。当您希望将类别按逻辑顺序排列时,例如按时间顺序或重要性顺序排列,这将有助于提高图表的可读性和可解释性。

示例

在此示例中,order=["Dinner", "Lunch"] 参数确保 x 轴上的类别按“Dinner”优先显示,然后是“Lunch”,无论它们在数据集中的顺序如何。

输出

Violinplot Using Seaborn In Python

说明

为了可视化按时间划分的小费分布,我们使用 seaborn 创建了一个小提琴图,但我们也指定了 x 轴上所需的类别排列。第一步是加载 Seaborn 用于可视化,以及 Matplotlib 的 pyplot 用于显示图表。seaborn.set(style="whitegrid") 命令执行会产生视觉上令人愉悦的网格背景。

通过 seaborn.load_dataset("tips") 命令加载 tips 数据集,该数据集包含餐厅账单数据以及小费费率和日期时间信息以及性别记录。seaborn.violinplot(x="time", y="tip", data=tips, order=["Dinner", "Lunch"]) 创建了小提琴图,该图将小费值与时间分类进行绘制。order 参数允许用户将 Dinner 设置为优先类别,该类别将出现在 x 轴上的 Lunch 之前,从而打破了数据集的顺序。将数据分解为有意义的类别对于数据解释很有用。最后,plt.show() 显示图表。

添加 palette 属性

在 seaborn 中使用 palette 允许用户设置图表颜色,从而增强视觉吸引力和数据解释。颜色规范工具允许您通过定义的颜色方案来区分数据中的不同组。Seaborn 提供预先构建的调色板集合,包括深色、柔和色、亮色和暗色选择,并允许用户通过自定义列表更改默认颜色。violinplot、barplot 和 swarmplot 功能中的 palette 属性有助于用户区分类别,以获得更好的数据可视化。

语法

说明

可以通过 seaborn.violinplot(x, y, data, palette="color_name") 实现生成具有自定义颜色的带有小提琴图的语法。x 变量确定轴数据,而 y 对应于出现在另一个轴上的数据值。此外,data 参数定义了源信息。palette 参数决定了图表应使用的着色系统。可以从预定义的 seaborn 选项“deep”、“muted”或“pastel”或从用户定义的颜色名称或颜色列表中选择小提琴图的调色板。使用 palette 功能时,图表更具吸引力,更易于解释,并允许更好地在视觉上区分类别。

示例

输出

Violinplot Using Seaborn In Python

说明

seaborn violinplot.subplot 使用我们选择的柔和色方案显示按日期划分的总账单金额模式。该程序通过导入 Seaborn 用于绘图,然后是 matplotlib.pyplot 来进行演示。通过 seaborn.set(style="whitegrid") 命令提供的 whitegrid 样式实现了清晰可读的背景外观。

我们使用 seaborn.load_dataset("tips") 函数检索 tips 数据集,其中包含有关餐厅账单、小费、日期、时间和其他变量的数据。seaborn.violinplot 函数创建小提琴图视觉效果,使用 tips 的日期数据作为 x 轴变量,total_bill 数据作为 y 轴,同时应用柔和的颜色。每个日期的视觉外观都受益于 palette="pastel" 函数参数开发的柔和色方案。最后,plt.show() 显示图表。

添加 saturation 参数

Seaborn 通过 saturation 参数控制图表颜色,该参数确定其强度级别。系统饱和度允许用户修改原始颜色色相值的强度级别,以达到特定的颜色亮度级别。Seaborn 默认饱和度值为 0.75,该值略微降低颜色强度,以创建更柔和的外观,从而改善 darins 或小提琴以及其他较大的绘图元素。在 seaborn 图表中,降低饱和度和将其设置为 1 的功能不同,因为降低饱和度会导致颜色更柔和,而提高饱和度会使图表颜色与定义的色相方案匹配。

语法

说明

seaborn.violinplot 函数创建小提琴图,用户可以通过 saturation 参数进行调整。通过 x 和 y 轴解释的变量以及分配的数据集被称为 data。用户可以通过 saturation 参数修改饱和度级别,该参数在 0(灰度)到 1(全彩色强度)之间变化。此工具默认饱和度值为 0.75,该值应用柔和的色调以改善图表外观,特别是在较大的显示屏上。饱和度值为 1 保留调色板颜色的完整强度。

以下是一个演示在小提琴图中如何使用 saturation 参数的示例

输出

Violinplot Using Seaborn In Python

说明

此插图演示了如何使用 seaborn 生成一个通过饱和度控制图表颜色来显示每日总账单分布的小提琴图。开始完成了 seaborn 和 matplotlib.pyplot 可视化工具的导入过程,然后通过 seaborn.set(style="whitegrid") 进行背景布局自定义。tips 数据集通过 seaborn.load_dataset("tips") 加载,其中包含有关餐厅账单以及小费的详细信息。

seaborn.violinplot 函数使用 tips 数据集创建一个日期-总账单分布图,同时将颜色匹配到 50% 的饱和度。通过 saturation=0.5 声明,颜色强度降低 50%,因此外观饱和度降低,不那么鲜艳。最后,plt.show() 显示图表。

添加 color 参数

通过 color 参数,seaborn 为所有图表元素生成统一的颜色应用,或提供用于梯度生成的种子值。通过在 seaborn 中定义 color 参数,图表的所有元素,包括条形图和小提琴图,都将显示在指定的基于调色板的颜色中,以建立图形一致性。梯度需要 color 参数来建立生成的梯度的起点。color 参数使用户能够维护特定的颜色模式,并在其视觉显示中增强数据可视化的一致性。

语法

说明

通过 seaborn.violinplot(x, y, data, color) 语法,可以在所有图表元素上实现统一的颜色应用。X 代表轴变量,Y 代表第二个轴变量,其中 data 选择要绘制的数据集。通过单个赋值,小提琴图的所有部分都从 color 参数接收其颜色。您应该通过使用直接名称(“blue”或“red”)或十六进制代码值(“#FF5733”)来为小提琴图分配颜色。通过此参数可以实现连贯的视觉显示,并允许您强调特定的图表特征。

示例

输出

Violinplot Using Seaborn In Python

说明

通过 seaborn 小提琴图可视化不同日期的总账单分布,所有元素都使用统一的天蓝色。我们的程序首先导入必要的 Seaborn 和 matplotlib.pyplot 可视化工具。通过 seaborn.set(style="whitegrid") 命令,背景外观获得了更好的可读性。

tips 数据集通过 seaborn.load_dataset("tips") 显示,该数据集包含有关餐厅小费、日期和总账单的数据。seaborn.violinplot(x="day", y="total_bill", data=tips, color="skyblue") 可视化数据,显示 x 轴上的日期以及 y 轴上的 total_bill 值,同时为所有元素使用天蓝色。color="skyblue" 参数为所有图表元素的小提琴和内部线条提供了一致的浅蓝色外观。最后,plt.show() 显示图表。

结论

称为 Seaborn 的 violinplot 的可视化工具通过结合箱线图属性和核密度估计,提供了全面的数据分布信息。包括 hue、palette、saturation、linewidth、color、order 和 scale 在内的参数为用户提供了通过自定义来展示关键见解的工具,这些自定义可以美化和简化复杂的数据读数。通过允许数据根据观察结果进行缩放和根据分类属性进行变量分组的功能,可以理解数据的密度和分布。通过 palette 修改可以提高图表的视觉吸引力,而 linewidth 和 saturation 组合则允许用户修改图表细节。小提琴图的适用性还扩展到不同类别的分布比较、异常值检测和数据趋势理解,因此它们成为研究探索和演示使用的重要工具。