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()函数显示图表。
示例
在这个示例中,我们将创建一个数据集,包含以下变量:Category、Value 1和Value 2。我们将创建两个类别,Category A和Category 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,以在图上显示每个组的中位数。
使用set_xticks和set_xticklabels函数设置x轴刻度和标签,使用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是一个提供更多细节控制的低级库。最后,我们发现小提琴图是比较不同组或类别之间数据分布的有效方法,使其成为探索性数据分析的有价值工具。