如何在 Seaborn 中使用数据点创建小提琴图?


在数据分析和可视化中,许多类型的图表用于以简洁且有意义的方式传达信息。其中一种流行的图表类型是小提琴图,它可用于可视化不同类别或组的数值变量的分布。小提琴图类似于箱线图,但它通过在箱线图顶部显示密度图来提供有关数据分布的更多信息。在本教程中,我们将学习如何使用我们自己创建的数据集在 Seaborn 中创建带有数据点的小提琴图。

要在 Seaborn 中创建小提琴图,我们必须导入必要的库,例如 Seaborn、Matplotlib 和 Pandas。Seaborn 用于创建图表,Matplotlib 用于自定义图表,Pandas 用于存储和处理数据。

语法

要创建小提琴图,您需要遵循以下语法:

# Create violin plot
sns.violinplot(data=data, x="x_variable", y="y_variable", hue="categorical_variable", split=True)

# Show the plot
plt.show()

我们调用 violinplot() 函数来创建小提琴图。我们传入我们的数据,指定要绘制的 x 和 y 变量以及用于根据分类变量为小提琴着色的 hue 变量。split 参数设置为 True 以按类别拆分小提琴。最后,我们调用 show() 函数来显示图表。

示例

在此示例中,我们将创建一个包含以下变量的数据集:类别、值 1 和值 2。我们将创建两个类别,类别 A 和类别 B,每个类别包含 100 个值。这些值将使用 Numpy 库随机生成。

现在我们已经创建了数据集,我们可以使用 Seaborn 来创建小提琴图。我们将使用 violinplot() 函数来创建图表。violinplot() 函数采用以下参数:

  •  要绘制的变量的列名或索引。

  • y  用于对数据进行分组的变量的列名或索引。

  • data  包含要绘制数据的 DataFrame。

  • inner  要在小提琴图内显示的图表类型。默认值为“box”,但我们可以将其更改为“points”以在小提琴图内显示数据点。

  • palette  要用于不同类别或组的颜色调色板。

以下代码将创建带有数据点的小提琴图:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Create a dataset with two categories and 100 values in each category
category_a = np.random.normal(0, 1, 100)
category_b = np.random.normal(2, 1, 100)
data = pd.DataFrame({'Category': ['A'] * 100 + ['B'] * 100, 'Value 1': np.concatenate((category_a, category_b)), 'Value 2': np.concatenate((category_b, category_a))})

# Create a Violin plot with data points
sns.violinplot(x='Category', y='Value 1', data=data, inner='points', palette='Set2')

# Customize the plot
plt.title('Violin Plot with Data Points')
plt.xlabel('Category')
plt.ylabel('Value 1')

# Display the plot
plt.show() 

输出

示例

创建了一个考试成绩的数据集,它包含三个组(A 组、B 组和 C 组),每个组包含 10 个分数。考试成绩在代码中是硬编码的,与前面示例中的随机数据不同。接下来,使用 pd.DataFrame 函数将数据集转换为 Pandas 数据帧。

之后,使用 subplots 函数创建图形和轴对象。然后使用轴对象的 violinplot 函数创建小提琴图。showmedians 参数设置为 True 以在图上显示每个组的中位数。

x 轴刻度和标签设置为使用 set_xticks 和 set_xticklabels 函数显示组名,并使用 set_xlabel 和 set_ylabel 函数设置 x 和 y 轴标签。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# create a dataset of exam scores for three groups of students
data = {'Group A': [75, 80, 85, 90, 70, 65, 90, 85, 80, 75],     'Group B': [80, 85, 90, 95, 75, 70, 95, 90, 85, 80],     'Group C': [85, 90, 95, 100, 80, 75, 100, 95, 90, 85], }

# convert the data to a pandas dataframe
df = pd.DataFrame(data)

# plot the violin plot using matplotlib
fig, ax = plt.subplots()
ax.violinplot(df.values, showmedians=True)
ax.set_xticks(np.arange(1, len(df.columns)+1))
ax.set_xticklabels(df.columns)
ax.set_xlabel('Groups')
ax.set_ylabel('Exam Scores')
plt.show()

输出

结论

我们讨论了小提琴图如何类似于箱线图,但显示了更详细的数据分布视图。我们了解到 Seaborn 是一个更高级别的库,它提供了更高级和美观的统计图形,而 Matplotlib 是一个更低级别的库,它提供了对图表细节的更多控制。最后,我们看到小提琴图是比较不同组或类别之间数据分布的有效方法,使其成为探索性数据分析的宝贵工具。

更新于: 2023年5月12日

316 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告