Python | 使用Matplotlib绘制Swarm Plot(蜂群图)

news2025/4/5 12:20:38

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提供了根据特定需求定制蜂群图的灵活性。通过添加抖动、调整点大小和透明度以及使用颜色和标记形状,您可以创建有效且视觉上吸引人的蜂群图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新版本Xmind结合DeepSeek快速生成美丽的思维导图

前言 我的上一篇博客(https://quickrubber.blog.csdn.net/article/details/146518898)中讲到采用Python编程可以实现和Xmind的互动,并让DeepSeek来生成相应的代码从而实现对内容的任意修改。但是,那篇博客中提到的Xmind有版本的限…

set和map封装

目录 set和map区别 set和map的插入 set和map的实现 修改红黑树的模板参数 修改比较时使用的变量 迭代器的实现 迭代器的定义 *解引用重载 ->成员访问重载 自增重载 重载 封装迭代器 RBTree迭代器封装 封装set迭代器 对set迭代器进行修改 封装map迭代器 修改…

【Linux】Orin NX + Ubuntu22.04配置国内源

1、获取源 清华源 arm 系统的源,可以在如下地址获取到 https://mirror.tuna.tsinghua.edu.cn/help/ubuntu-ports/ 选择HTTPS,否则可能报错: 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?)查看Orin NX系统版本 选择jammy的源 2、更新源 1)备份原配…

Open-Sora:开源AI视频生成的新星

一.引言 近年来,AI视频生成技术快速发展,从文本生成图像(如Stable Diffusion、DALLE)到文本生成视频(如Runway、Pika),AI在多媒体创作领域的应用日益广泛。近期,Open-Sora作为一款开…

【堆】《深入剖析优先级队列(堆):数据结构与算法的高效搭档》

文章目录 前言例题一、最后一块石头的重量二、数据流中的第 K 大元素三、前K个高频单词四、数据流的中位数 结语 前言 什么是优先级队列算法呢?它的算法原理又该怎么解释? 优先级队列(堆)算法是一种特殊的数据结构和算法&#xf…

【CMOS输出缓冲器驱动强度】

一 、学习笔记 原始资料:https://www.ti.com.cn/cn/lit/an/zhcae18/zhcae18.pdf?ts1743589394832 Q1、电平转换芯片的其中一个关键指标是转换速率,转换速率跟什么因素有关系呢? 1、瞬态驱动强度 上升或下降时间用于评估瞬态驱动强度。需要…

【C++】Cplusplus进阶

模板的进阶: 非类型模板参数 是C模板中允许使用具体值(而非类型)作为模板参数的特性。它们必须是编译时常量,且类型仅限于整型、枚举、指针、引用。(char也行) STL标准库里面也使用了非类型的模板参数。 …

透明的卡组收费模式IC++

IC是信用卡处理商用来计算每笔交易相关费用的定价模型。与统一或混合定价相比,IC提供了额外的透明度。 作为企业主,了解IC定价的来龙去脉至关重要,以确定它是否对您的运营有意义。 什么是IC? IC或interchange plus是一种流行的定…

吾爱置顶软件,吊打电脑自带功能!

今天我给大家带来一款超棒的软件,它来自吾爱论坛的精选推荐,每一款都经过精心挑选,绝对好用! S_Clock 桌面计时软件 这款软件的界面设计特别漂亮,简洁又大方。它是一款功能齐全的时钟计时倒计时软件,既能正…

使用MFC ActiveX开发KingScada控件(OCX)

最近有个需求,要在KingScada上面开发一个控件。 原来是用的WinCC,WinCC本身是支持调用.net控件,就是winform控件的,winform控件开发简单,相对功能也更丰富。奈何WinCC不是国产的。 话说KingScada,国产组态软…

【AI论文】CodeARC:评估归纳程序合成中大语言模型代理的推理能力基准

摘要:归纳程序合成,或称示例编程,要求从输入输出示例中合成能够泛化到未见输入的函数。尽管大型语言模型代理在自然语言指导下的编程任务中展现出了潜力,但它们在执行归纳程序合成方面的能力仍待深入探索。现有的评估协议依赖于静…

加密解密工具箱 - 专业的在线加密解密工具

加密解密工具箱 - 专业的在线加密解密工具 您可以通过以下地址访问该工具: https://toolxq.com/static/hub/secret/index.html 工具简介 加密解密工具箱是一个功能强大的在线加密解密工具,支持多种主流加密算法,包括 Base64、AES、RSA、DES…

抖音短视频安卓版流畅度测评 - 真实

对于抖音短视频安卓版的流畅度,实际体验可以受到多方面因素的影响,比如设备性能、系统优化、网络情况和应用本身的优化程度。以下是一些常见的测评维度和抖音安卓版本流畅度的实际表现: 1.启动速度 抖音的启动速度通常较快,但如果…

基于javaweb的SSM+Maven机房管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

发动机试验台底座:汽车研发的关键支撑(北重制造厂家)

发动机试验台底座是汽车研发过程中的重要组成部分,它承载着发动机及相关部件,在试验过程中提供稳定的支撑。底座的设计和制造对于发动机试验的精度和可靠性至关重要,它需要具备足够的承载能力、稳定性和耐久性,以确保试验过程的准…

Linux红帽:RHCSA认证知识讲解(九)标准输入输出、重定向、过滤器与管道

Linux红帽:RHCSA认证知识讲解(九)标准输入输出、重定向、过滤器与管道 前言一、标准输入与输出、重定向,使用过滤器筛选文件信息1.1 Linux 的标准输入与输出1.2 什么是输入重定向1.3 输出重定向1.4 标准错误输出重定向1.5 使用过滤…

智慧园区大屏如何实现全局监测:监测意义、内容、方式

智慧园区的价值不容小觑呀,可以说园区的大部分数据都在这个大屏上,监测数据越多,那么大屏的价值就越大。很多小伙伴拿到需求后感觉无从下手,本文在这里智慧园区大屏可以监测哪些内容、监测的意义、监测的方式等,欢迎点…

LangChain核心解析:掌握AI开发的“链“式思维

0. 思维导图 1. 引言 🌟 在人工智能快速发展的今天,如何有效地利用大语言模型(LLM)构建强大的应用成为众多开发者关注的焦点。前面的课程中,我们学习了正则表达式以及向量数据库的相关知识,了解了如何处理文档并将其附加给大模型。本章我们将深入探讨LangChain中的核心概…

思维链编程模式下可视化医疗编程具体模块和流程架构分析(全架构与代码版)

引言 随着人工智能在医疗领域的广泛应用,医疗AI思维链可视化编程工具应运而生,旨在为非技术背景的医疗从业者提供便捷的AI模型开发平台。这个工具通过直观的可视化界面,简化了AI模型的构建过程,帮助用户高效完成数据处理、模型训…

AI与玩具结合的可行性分析

文章目录 一、市场需求:教育与陪伴的双重驱动(一)教育需求(二)情感陪伴需求(三)消费升级 二、技术发展:赋能玩具智能化(一)AI技术的成熟(二&#…