如何在 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() 函数采用以下参数:
x − 要绘制的变量的列名或索引。
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 是一个更低级别的库,它提供了对图表细节的更多控制。最后,我们看到小提琴图是比较不同组或类别之间数据分布的有效方法,使其成为探索性数据分析的宝贵工具。