📅  最后修改于: 2023-12-03 15:19:08.625000             🧑  作者: Mango
Swarmplot 是一种可视化数据分布的图表类型。与箱线图类似,它可以用于展示多组数据之间的差异。Swarmplot 的特点是在数据点周围添加了一个小的偏移量,避免了数据点的重叠。因此,Swarmplot 适用于小规模的数据集。
Swarmplot 是 seaborn 库中的一个可视化函数,因此需要导入 seaborn 库和 matplotlib 库。
import seaborn as sns
import matplotlib.pyplot as plt
这里我们以 seaborn 自带的 tips 数据集为例,让我们看一下数据集中的信息。
sns.load_dataset('tips').info()
结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 total_bill 244 non-null float64
1 tip 244 non-null float64
2 sex 244 non-null category
3 smoker 244 non-null category
4 day 244 non-null category
5 time 244 non-null category
6 size 244 non-null int64
dtypes: category(4), float64(2), int64(1)
memory usage: 7.0 KB
这是一个具有 244 行和 7 列的数据集。我们我们只需要使用其中的两列数据 total_bill 和 day,为了更具有可读性,用数字代替星期几,0 代表星期天,6 代表星期六。
import pandas as pd
df = sns.load_dataset('tips')
df = df[['total_bill', 'day']]
df['day'] = pd.Categorical(df['day']).codes
Swarmplot 的绘制非常简单,只需要使用 sns.swarmplot 函数即可。其中 x 表示 total_bill 数据,y 表示 day 数据。
sns.swarmplot(x='total_bill', y='day', data=df)
为了更好地展示数据分布情况,我们可以在 Swarmplot 上添加箱线图。使用 sns.boxplot 函数即可。
sns.boxplot(x='total_bill', y='day', data=df)
绘制 Swarmplot 和 箱线图可以通过在同一张图表上绘制两个子图实现。使用 matplotlib 的子图功能,先创建一个 figure 对象,然后调用 add_subplot 方法添加子图,最后在子图上绘制 Swarmplot 和 箱线图。设置 Swarmplot 的参数 dodge=True 可以让数据点避免重叠。
fig, ax = plt.subplots(1, 2, figsize=(10, 6))
sns.swarmplot(x='total_bill', y='day', data=df, ax=ax[0], dodge=True)
sns.boxplot(x='total_bill', y='day', data=df, ax=ax[1])