Python | 在Pandas中按照中值对箱形图排序
箱形图是可视化数据分布的强大工具,因为它们提供了对数据集内的散布、四分位数和离群值的洞察。然而,当处理多个组或类别时,通过特定的测量(如中位数)对箱形图进行排序可以提高清晰度并有助于揭示模式。在本文中,我们将探索如何在Python中使用Pandas和Matplotlib按中值对箱形图进行排序。
为什么按中位数对箱形图排序?
箱形图(或盒须图)是一种基于五个关键统计数据显示数据分布的标准化方法:
(最小值,最大值,Q1, Q2, Q3)
-
中心趋势的代表:中位数是一组数据中位于中间位置的数值,它不受极端值的影响,因此是衡量数据集中趋势的一个稳健指标。
-
抗干扰性:与平均数不同,中位数不受异常值或极端值的影响。在数据集中存在异常值时,中位数提供了一个更准确的中心位置的度量。
-
易于比较:当多个箱形图并排放置时,通过中位数对它们进行排序可以直观地比较不同组或类别之间的中心趋势。
-
视觉清晰:按中位数排序的箱形图可以更清晰地展示数据的分布情况,特别是当数据集之间的中位数差异较大时。
-
便于识别模式:排序后的箱形图可以帮助观察者识别数据中的模式或趋势,比如哪些组的中位数更高或更低,以及数据的分散程度。
-
减少混淆:如果不按中位数排序,箱形图可能会显得杂乱无章,特别是当有很多箱形图需要比较时,按中位数排序有助于减少视觉上的混淆。
-
便于解读:对于不熟悉统计数据的观察者来说,按中位数排序的箱形图更容易解读,因为它们直观地展示了数据的中心位置和分布。
使用Python实现按中值对箱形图排序
首先,确保安装了所需的库:pandas、matplotlib和seaborn。
您可以使用以下命令安装它们:
pip install pandas matplotlib seaborn
安装后,导入必要的库:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
让我们创建一个样本数据集,在其中我们将为不同的类别生成随机数据:
# Creating a sample DataFrame
data = {'Category': ['A', 'B', 'C', 'D', 'E'] * 10,'Values': [10, 20, 15, 30, 25, 11, 18, 13, 35, 22, 9, 21, 14, 31, 23,12, 19, 16, 28, 24, 8, 17, 14, 29, 26]
}
df = pd.DataFrame(data)
在这个数据集中,我们有一个表示不同类别的Category列和一个表示每个类别的数值的Values列。
步骤1:计算每个类别的中位数
对箱形图进行排序的第一步是计算每个类别的中值。我们将使用Pandas的groupby方法按类别对数据进行分组,并计算每组的中位数:
# Compute the median for each category
category_median = df.groupby('Category')['Values'].median().reset_index()# Sort the categories by the median
category_median_sorted = category_median.sort_values(by='Values')
这将为我们提供一个基于中值的分类DataFrame。
步骤2:按中位数对类别排序
为了以所需的顺序可视化箱形图,我们需要根据排序的中值对原始DataFrame中的类别进行重新排序。我们可以通过将Category列转换为分类类型并根据排序的中位数指定顺序来实现这一点:
# Reorder the categories in the DataFrame based on the sorted median
df['Category'] = pd.Categorical(df['Category'],categories=category_median_sorted['Category'],ordered=True)
此步骤可确保箱形图类别在绘制时遵循中位数的顺序。
步骤3:创建排序箱形图
现在我们已经将类别按中值排序,我们可以使用seaborn创建箱形图:
# Create the boxplot sorted by median
plt.figure(figsize=(8, 6))
sns.boxplot(x='Category', y='Values', data=df)
plt.title('Boxplot Sorted by Median Values')
plt.show()

在生成的箱形图中:
- 这些框根据每个类别中数据的中值进行排序。
- 每个框的中位数由框内的线表示。
- 四分位距(IQR)由方框本身表示,而须线表示IQR的1.5倍内的数据范围。
完整代码示例
按中值对类别进行排序有助于更清楚地了解数据分布,并允许更好地比较类别之间的差异。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Sample DataFrame
data = {'Category': ['A', 'B', 'C', 'D', 'E'] * 5, # Changed from * 10 to * 5 to match the length of 'Values' 'Values': [10, 20, 15, 30, 25, 11, 18, 13, 35, 22, 9, 21, 14, 31, 23,12, 19, 16, 28, 24, 8, 17, 14, 29, 26]
}
df = pd.DataFrame(data)# Compute the median for each category and sort by the median
category_median = df.groupby('Category')['Values'].median().reset_index()
category_median_sorted = category_median.sort_values(by='Values')# Reorder the categories in the DataFrame based on the sorted median
df['Category'] = pd.Categorical(df['Category'],categories=category_median_sorted['Category'],ordered=True)# Create the boxplot sorted by median
plt.figure(figsize=(8, 6))
sns.boxplot(x='Category', y='Values', data=df)
plt.title('Boxplot Sorted by Median Values')
plt.show()
增强箱形图可视化
1. 突出显示中值
突出显示箱形图上的中值可用于强调排序标准。这可以通过将中值绘制为箱形图上的点来完成:
# Plot the median values as red dots
medians = df.groupby('Category')['Values'].median()
for i in range(len(medians)):plt.plot(i, medians[i], 'ro') # 'ro' is red color with circle markerplt.title('Boxplot with Highlighted Median Values')
plt.show()

2. 处理中值中的关系
在某些情况下,多个类别可能具有相同的中值。默认情况下,sort_values()按照它们在数据集中出现的顺序排列它们。但是,您可以通过添加其他排序条件来自定义平局打破规则,例如中位数相同时按均值排序:
# Compute both median and mean to handle ties
category_stats = df.groupby('Category').agg({'Values': ['median', 'mean']}).reset_index()
category_stats.columns = ['Category', 'Median', 'Mean']# Sort by median and then by mean in case of ties
category_stats_sorted = category_stats.sort_values(by=['Median', 'Mean'])
print(category_stats.columns)
输出
Index(['Category', 'Median', 'Mean'], dtype='object')
总结
在Pandas中按中值对箱形图进行排序可以增强可视化的清晰度和可解释性,特别是在处理多个类别时。通过遵循本文中概述的步骤,您可以轻松地计算中位数,重新排序类别,并使用Pandas和Seaborn创建排序箱形图。
相关文章:
Python | 在Pandas中按照中值对箱形图排序
箱形图是可视化数据分布的强大工具,因为它们提供了对数据集内的散布、四分位数和离群值的洞察。然而,当处理多个组或类别时,通过特定的测量(如中位数)对箱形图进行排序可以提高清晰度并有助于揭示模式。在本文中&#…...
[实战] 二分查找与哈希表查找:原理、对比与C语言实现(附完整C代码)
二分查找与哈希表查找:原理、对比与C语言实现 一、引言 在计算机科学中,高效的数据查找是核心问题之一。本文深入解析两种经典查找算法:二分查找与哈希表查找,从算法原理、时间复杂度、适用场景到完整C语言实现,提供…...
游戏引擎学习第215天
总结并为今天做铺垫 今天的工作内容是解决调试系统中的一个小问题。昨天我们已经完成了大部分的调试系统工作,但还有一个小部分没有完全处理,那就是关于如何层次化组织数据的问题。我们遇到的一个问题是,演示代码中仍有一个尚未解决的部分&a…...
【Redis】redis事物与管道
Redis 事务(Transaction) 事务概念 事务:是一组操作的集合,是不可分割的工作单元。Redis 事务特点: 一个事务可以一次执行多个命令。所有命令都被顺序化,形成一个队列。所有命令在执行 EXEC 时一次性、顺…...
Django信号使用完全指南示例
推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 **引言:****先决条件:****目录:****1. 什么是Django信号?****2:设置你的Django项目****2.1. 安装Django**2.2. 创建一个Django项…...
DeepSeek BLEU和ROUGE(Recall)的计算
以下是 BLEU Score (Bilingual Evaluation Understudy)和 ROUGE Score(Recall-Oriented Understudy for Gisting Evaluation) 的原生Python实现(不依赖第三方库),通过分步计算逻辑和示例详细说明。 一、BLEU Score 实现 核心逻辑…...
vulkanscenegraph显示倾斜模型(5.9)-vsg中vulkan资源的编译
前言 上一章深入剖析了GPU资源内存及其管理,vsg中为了提高设备内存的利用率,同时减少内存(GPU)碎片,采用GPU资源内存池机制(vsg::MemoryBufferPools)管理逻辑缓存(VkBuffer)与物理内存(VkDeviceMemory)。本章将深入vsg中vulkan资源的编译(包含…...
今日行情明日机会——20250409
今日行情还需要考虑关税对抗~ 2025年4月8日涨停的主要行业方向分析 1. 军工(19家涨停) 细分领域:国防装备、航空航天、军民融合。催化因素:国家安全战略升级、国防预算增加、重大军工项目落地预期。 2. 免税(15家涨…...
XHR、FetchAxios详解网络相关大片文件上传下载
以下是 XHR(XMLHttpRequest) 与 Fetch API 的全面对比分析,涵盖语法、功能、兼容性等核心差异: 一、语法与代码风格 XHR(基于事件驱动) 需要手动管理请求状态(如 onreadystatechange 事件)和错误处理,代码冗长且易出现回调地狱。 const xhr = new XMLHttpRequest(); x…...
Python基础总结(四)之元组
文章目录 一、元组格式二、元组操作2.1 转换元组 与 列表一样,元组也是序列,唯一的区别在于元组是不能修改的,与字符串一样。 一、元组格式 元组的创建方式很简单,秩序用逗号将元素隔开就能自动创建一个元组 示例: …...
系统分析师(六)-- 计算机网络
概述 TCP/IP 协议族 DNS DHCP 网络规划与设计 逻辑网络设计 物理网络设计 题目 层次化网络设计 网络冗余设计 综合布线系统 IP地址 网络接入技术 其他网络技术应用 物联网...
【前端】【React】useCallback的作用与使用场景总结
一、useCallback 的作用与使用场景总结 useCallback 是 React 提供的一个 Hook,用于缓存函数的引用,避免因为组件重新渲染而导致函数地址发生变化。它返回一个记忆(memoized)后的回调函数,只有当依赖项发生变化时才会…...
Qwen2.5-VL Technical Report 论文翻译和理解
一、TL;DR Qwen2.5-VL是QwenVL的最新模型,在视觉识别、精准目标定位、稳健文档解析以及长视频理解等方面实现了重大突破引入了动态分辨率处理和绝对时间编码,使其能够处理不同尺寸的图像以及长达数小时的视频,并实现秒级事件定位…...
Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析
Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析 漏洞背景 漏洞编号:CNVD-2025-06036 CVE编号:待分配 厂商:腾讯Foxmail 影响版本:Foxmail < 7.2.25 漏洞类型&#x…...
C语言打印的坑
使用下面的代码buf dprt("data: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 明明是一个字节一个字节的打,打出来的数据有些却是4个字节 0xffffffff 0xffffffff 0xffffffff 0x7f 0xffffffff 0x7f0…...
高并发内存池(三):PageCache(页缓存)的实现
前言: 在前两期内容中,我们深入探讨了内存管理机制中在 ThreadCache 和 CentralCache两个层级进行内存申请的具体实现。这两层缓存作为高效的内存分配策略,能够快速响应线程的内存需求,减少锁竞争,提升程序性能。 本期…...
pycharm已有python3.7,如何新增Run Configurations中的Python interpreter为python 3.9
在 PyCharm 中,如果你已经安装了 Python 3.9,并且希望在 Run Configurations 中新增一个 Python 3.9 的解释器,可以按照以下步骤操作: 步骤 1:打开 PyCharm 设置 点击 PyCharm 左上角的 File 菜单。选择 Settings&am…...
Linux驱动开发-网络设备驱动
Linux驱动开发-网络设备驱动 一,网络设备总体结构1.1 总体架构1.2 NAPI数据处理机制 二,RMII和MDIO2.1 RMII接口2.2 MDIO接口 三,MAC和PHY模块3.1 MAC模块3.2 PHY模块 四,网络模型4.1 网络的OSI和TCP/IP分层模型4.1.1 传输层&…...
学习笔记083——Java Stream API
文章目录 1、过滤数据 filter()2、转换元素 map()3、排序 sorted()3.1、自定义排序规则 4、去重 distinct()5、限制元素数量 limit()6、收集结果 collect()6.1、收集为List6.2、收集为Set6.3、转为Map6.4、基本用法(注意键冲突会抛异常)6.5、处理键冲突&…...
DataEase同比环比
DataEase同比环比 前言术语实现表结构设计DataEase设计创建数据集创建仪表盘最后前言 某大数据项目,需要比较展示今年跟去年的数据,如下图: 说明:比较24,25的产品销量,相同月份做一组,并排放一块 还有更进一步: 说明:比较24,25相同月份,相同产品的销量 直接用DataE…...
RAG 工程基础
RAG 概念 RAG(Retrieval - Augmented Generation)技术是一种将检索与生成相结合的人工智能技术,旨在利用外部知识源来增强语言模型的生成能力,提高生成内容的质量、准确性和相关性。 具体来说,RAG 技术在处理用户输入的…...
基础算法:滑动窗口_python版本
能使用滑动窗口的题,基本都需要数字为正整数,这样才能保证滑入一个数字总和是增加的(单调性) 一、209. 长度最小的子数组 思路: 已每个位置为右端点,依次加大左端点,最短不满足 sum(num[left,right]) < target的。…...
Qt 之opengl shader language
着色器示例代码 实际运行效果...
PyRoboPlan 库,给 panda 机械臂微分 IK 上大分,关节限位、碰撞全不怕
视频讲解: PyRoboPlan 库,给 panda 机械臂微分 IK 上大分,关节限位、碰撞全不怕 代码仓库:https://github.com/LitchiCheng/mujoco-learning 今天分享PyRoboPlan库,比之前的方式优点在于,这个库考虑了机械…...
GPT - TransformerDecoderBlock
本节代码定义了一个 TransformerDecoderBlock 类,它是 Transformer 架构中解码器的一个基本模块。这个模块包含了多头自注意力(Multi-Head Attention)、前馈网络(Feed-Forward Network, FFN)和层归一化(Lay…...
LabVIEW 控制电机需注意的关键问题
在自动化控制系统中,LabVIEW 作为图形化编程平台,因其高度可视化、易于集成硬件等优势,被广泛应用于电机控制场景。然而,要实现稳定、精确、高效的电机控制,仅有软件并不足够,还需结合硬件选型、控制逻辑设…...
CSS 定位属性的生动比喻:以排队为例理解 relative 与 absolute
目录 一、理解标准流与队伍的类比 二、relative 定位:队伍中 “小范围活动” 的人 三、absolute 定位:队伍中 “彻底离队” 的人 在学习 CSS 的过程中,定位属性relative和absolute常常让初学者感到困惑。它们的行为方式和对页面布局的影响较为抽象,不过,我们可以通过一个…...
Jenkins 发送钉钉消息
这里不介绍 Jenkins 的安装,可以网上找到很多安装教程,重点介绍如何集成钉钉消息。 需要提前准备钉钉机器人的 webhook 地址。(网上找下,很多教程) 下面开始配置钉钉机器人,登录 Jenkins,下载 …...
nt!KeRemoveQueue 函数分析之加入队列后进入等待状态
第一部分: 参考例子:应用程序调用kernel32!GetQueuedCompletionStatus后会调用nt!KeRemoveQueue函数进入进入等待状态 0: kd> g Breakpoint 8 hit nt!KiDeliverApc: 80a3c776 55 push ebp 0: kd> kc # 00 nt!KiDeliverApc 01 nt…...
OpenCV 风格迁移
一、引言 在计算机视觉和图像处理领域,风格迁移是一项令人着迷的技术。它能够将一幅图像(风格图像)的艺术风格,如梵高画作的笔触风格、莫奈的色彩风格等,迁移到另一幅图像(内容图像)上&#x…...
