Python使用Matplotlib绘制Swarm Plot(蜂群图)的代码步骤

 更新时间:2025年04月04日 08:34:06   作者:python收藏家  
蜂群图(Swarm Plot)是一种用于可视化分类数据分布的图表类型,它将数据点沿着一个或多个分类变量轻微地分散,以避免它们之间的重叠,从而更好地显示数据的分布密度和分布趋势,本文给大家介绍了Python使用Matplotlib绘制Swarm Plot的代码步骤,需要的朋友可以参考下

Swarm Plot(蜂群图)是一种数据可视化图表,它用于展示分类数据的分布情况。这种图表通过将数据点沿着一个或多个分类变量轻微地分散,以避免它们之间的重叠,从而更好地显示数据的分布密度和分布趋势。Swarm Plot特别适用于较小的数据集。

为什么使用Swarm Plots?

蜂群图在以下情况下非常有利:

  • 可视化类别内的点分布。
  • 识别数据中的模式或离群值。
  • 通过显示单个数据点来补充其他图,如箱形图或小提琴图。

但是,它们可能会因大型数据集而变得混乱,并且可能不适合涉及多个变量的复杂关系。

使用Matplotlib创建Swarm Plots

虽然Seaborn提供了一种简单的方法来创建蜂群图,但Matplotlib没有用于这种类型图的内置函数。但是,您可以通过编写自定义函数来创建类似的效果。

要在Matplotlib中创建蜂群图,关键是操纵数据点的x轴位置,使它们水平间隔开,避免重叠,同时保持它们的分类分组。

步骤1:导入所需的库

首先导入必要的库,例如Matplotlib、NumPy和Pandas以进行数据操作。以下是如何使用Matplotlib创建蜂群图的示例:

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

步骤2:生成示例数据

对于本文,让我们创建一个表示多个类别和数值数据的随机数据集。您可以将其替换为您想要可视化的任何数据集。

# Create a sample dataset
np.random.seed(0)
categories = ['A', 'B', 'C']
data = {
    'Category': np.random.choice(categories, size=150),
    'Value': np.random.randn(150)
}
df = pd.DataFrame(data)

步骤3:散点图准备

使用Matplotlib的散点函数绘制各个点。y轴表示值,而x轴表示类别。

# Create a basic scatter plot
plt.scatter(df['Category'], df['Value'])
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Basic Scatter Plot')
plt.show()

输出

在这里插入图片描述

在这个阶段,点将重叠,特别是在密集区域。下一步是将点隔开,以获得更清晰的群体图效果。

步骤4:添加抖动以避免重叠

为了避免数据点重叠,您可以向x轴位置添加抖动(一个小的随机变化)。这将模拟群集图的效果,其中点水平分布。

def add_jitter(x, scale=0.05):
    return x + np.random.uniform(-scale, scale, size=len(x))

df['Jittered_Category'] = df['Category'].apply(lambda x: categories.index(x))
df['Jittered_Category'] = add_jitter(df['Jittered_Category'])

# Create a scatter plot with jittered points
plt.scatter(df['Jittered_Category'], df['Value'], alpha=0.7)
plt.xticks(ticks=range(len(categories)), labels=categories)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Swarm Plot with Jittered Points')
plt.show()

在这里插入图片描述

在这里,add_jitter用于稍微移动每个类别中的点的x轴位置。这样可以防止重叠,并使点沿分类轴均匀分布。

自定义蜂群图

1. 使用注释增强蜂群图

您可以向蜂群图添加文本注释以突出显示某些数据点。当您想要指出特定的值或类别时,这特别有用。注释有助于强调特定的数据点并提供额外的上下文。

# Add annotations to the plot
plt.scatter(df['Jittered_Category'], df['Value'], s=50, alpha=0.6)
plt.xticks(ticks=range(len(categories)), labels=categories)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Swarm Plot with Annotations')

# Highlight a point
highlight = df.iloc[10]
plt.annotate('Highlighted Point', (highlight['Jittered_Category'], highlight['Value']),
             xytext=(10, 20), textcoords='offset points', arrowprops=dict(arrowstyle='->'))

plt.show()

在这里插入图片描述

2. 为不同类别添加颜色

要区分类别,可以使用散点图中的c参数为每个类别添加不同的颜色。

在这里插入图片描述

将蜂群图与其他图类型叠加

蜂群图可以与其他类型的图(如箱线图或小提琴图)结合使用,以提供更全面的数据分布视图。例如,您可以将群图叠加在箱形图上。

# Create a box plot
plt.boxplot([df[df['Category'] == cat]['Value'] for cat in categories], positions=range(len(categories)))

# Overlay the swarm plot
plt.scatter(df['Jittered_Category'], df['Value'], c=df['Color'], s=50, alpha=0.6)
plt.xticks(ticks=range(len(categories)), labels=categories)
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Swarm Plot Overlayed on Box Plot')
plt.show()

在这里插入图片描述

Tips和最佳实践

  • 数据缩放:确保x轴正确缩放,以适应抖动,而不会过度重叠。
  • 抖动灵敏度:您添加的抖动量应根据数据的密度进行调整。太多的抖动会使图形混乱。
  • 小心使用颜色和标记:颜色和形状的选择应避免混淆,特别是在具有许多类别的复杂图中。

总结

在Matplotlib中创建蜂群图需要手动操作数据点的x轴位置以避免重叠。虽然像Seaborn这样的库简化了这个过程,但Matplotlib提供了根据特定需求定制蜂群图的灵活性。通过添加抖动、调整点大小和透明度以及使用颜色和标记形状,您可以创建有效且视觉上吸引人的蜂群图。

以上就是Python使用Matplotlib绘制Swarm Plot(蜂群图)的代码步骤的详细内容,更多关于Python Matplotlib绘制Swarm Plot的资料请关注脚本之家其它相关文章!

相关文章

  • 如何安装并在pycharm使用selenium的方法

    如何安装并在pycharm使用selenium的方法

    这篇文章主要介绍了如何安装并在pycharm使用selenium,本文给大家提到了selenium安装并导入pycharm的教程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • python常用函数random()函数详解

    python常用函数random()函数详解

    这篇文章主要介绍了python常用函数random()函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • pyqt环境搭建教程

    pyqt环境搭建教程

    pyqt是一个用于创建GUI应用程序的跨平台工具包,它将python与qt库融为一体,本文给大家分享pyqt环境搭建教程,感兴趣的朋友一起看看吧
    2023-11-11
  • Python django框架开发发布会签到系统(web开发)

    Python django框架开发发布会签到系统(web开发)

    这篇文章主要介绍了Python django框架开发发布会签到系统(web开发),本文通过实例代码效果展示截图的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Pandas数据处理库画图与文件读取使用示例

    Pandas数据处理库画图与文件读取使用示例

    这篇文章主要为大家介绍了Pandas数据处理库画图与文件读取使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Django实现前台上传并显示图片功能

    Django实现前台上传并显示图片功能

    这篇文章主要介绍了Django实现前台上传并显示图片功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python日期和时间戳的转换的实现方式

    Python日期和时间戳的转换的实现方式

    Python中日期和时间的处理涉及到time和datetime模块,time模块可实现时间戳与格式化时间字符串的转换,而datetime模块则提供更加直接易用的接口,本文详细给大家介绍了Python日期和时间戳的转换的实现方式,需要的朋友可以参考下
    2024-10-10
  • Python解析网页源代码中的115网盘链接实例

    Python解析网页源代码中的115网盘链接实例

    这篇文章主要介绍了Python解析网页源代码中的115网盘链接实例,主要采用了正则表达式re模块来实现该功能,需要的朋友可以参考下
    2014-09-09
  • 使用Python计算隐含波动率

    使用Python计算隐含波动率

    隐含波动率(Implied Volatility)在金融领域是一个核心概念,用于描述市场对于未来资产价格波动的预期程度,本文将详细介绍如何使用Python计算隐含波动率,需要的可以了解下
    2024-11-11
  • Python使用正则表达式实现爬虫数据抽取

    Python使用正则表达式实现爬虫数据抽取

    这篇文章主要介绍了Python使用正则表达式实现爬虫数据抽取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论