如何在 Seaborn 中用数据点制作 Violinpot?
在数据分析和可视化中,有许多类型的图表可用于以简洁而有意义的方式传达信息。其中一种流行的图表类型是小提琴图,它可用于可视化不同类别或组的数字变量的分布。小提琴图类似于箱线图,但它通过在箱线图顶部显示密度图来提供有关数据分布的更多信息。在本教程中,我们将学习如何使用我们自己创建的数据集在 Seaborn 中创建带有数据点的小提琴图。
要在 Seaborn 中创建小提琴图,我们必须导入必要的库,例如 Seaborn、Matplotlib 和 Pandas。 Seaborn 用于创建绘图,Matplotlib 用于自定义绘图,Pandas 用于存储和操作数据。
语法
要创建小提琴图,您需要遵循以下语法 -
# 创建小提琴图 sns.violinplot(data=data, x="x_variable", y="y_variable", hue="categorical_variable", split=True) # 显示绘图 plt.show()
我们调用 violinplot() 函数来创建小提琴图。我们传入数据,指定要绘制的 x 和 y 变量以及通过分类变量为小提琴着色的色调变量。split 参数设置为 True,以按类别拆分小提琴。最后,我们调用 show() 函数来显示图表。
示例
在此示例中,我们将创建一个包含以下变量的数据集:类别、值 1 和值 2。我们将创建两个类别,类别 A 和类别 B,每个类别有 100 个值。这些值将使用 Numpy 库随机生成。
现在我们已经创建了数据集,我们可以使用 Seaborn 创建小提琴图。我们将使用 violinplot() 函数来创建图表。violinplot() 函数采用以下参数 −
x − The column name or index of the variable to be plotted.
y − The column name or index of the variable to be used for grouping the data.
data − The DataFrame containing the data to be plotted.
inner − The type of plot to be displayed inside the Violin plot. The default value is 'box', but we can change it to 'points' to display data points inside the Violin plot.
palette − The color palette to be used for the different categories or groups.
以下代码将创建带有数据点的 Violin 图 −
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 创建一个包含两个类别且每个类别有 100 个值的数据集 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))}) # 创建一个带有数据点的小提琴图 sns.violinplot(x='Category', y='Value 1', data=data, inner='points', palette='Set2') # 自定义图 plt.title('带有数据点的小提琴图') plt.xlabel('Category') plt.ylabel('Value 1') # 显示图 plt.show()
输出
示例
创建考试成绩数据集,该数据集由三组(A 组、B 组和 C 组)组成,每组有 10 个分数。考试成绩在代码中是硬编码的,与上例中的随机数据不同。接下来,使用 pd.DataFrame 函数将数据集转换为 Pandas 数据框。
之后,使用 subplots 函数创建图形和轴对象。然后使用轴对象的 violinplot 函数创建小提琴图。将 showmedians 参数设置为 True 以在图中显示每个组的中位数。
使用 set_xticks 和 set_xticklabels 函数设置 x-ticks 和标签以显示组名称,并使用 set_xlabel 和 set_ylabel 函数设置 x 和 y 轴标签。
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 创建三组学生考试成绩的数据集 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], } # 将数据转换为 pandas 数据框 df = pd.DataFrame(data) # 绘制使用 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 是一个低级库,它提供了对图细节的更多控制。最后,我们看到小提琴图是一种比较不同组或类别之间数据分布的有效方法,使其成为探索性数据分析的宝贵工具。