Matplotlib箱形图的绘制与高级技巧解析【第57篇—python:Matplotlib箱形图】

news2024/9/21 14:35:39

文章目录

  • Matplotlib箱形图的绘制与高级技巧解析
    • 1. 水平箱形图
    • 2. 带缺口箱形图
    • 3. 群组箱形图
    • 4. 堆叠箱形图
    • 5. 核密度箱形图
    • 6. 小提琴箱形图
    • 7. 组合箱形图
    • 8. 多子图中的炫酷箱形图
    • 9. 动态箱形图与交互式可视化
      • 9.1 动态箱形图
      • 9.2 交互式小提琴箱形图
    • 总结

Matplotlib箱形图的绘制与高级技巧解析

箱形图是一种常用的数据可视化工具,可以展示数据的分布、离散度和异常值。Matplotlib是一个强大的Python绘图库,提供了丰富的箱形图绘制功能。在本篇技术博客中,我们将深入探讨Matplotlib中不同种类炫酷箱形图的参数以及通过代码实战演示它们的绘制。

1. 水平箱形图

首先,我们来看如何绘制水平箱形图。通过设置参数vert=False,我们可以将箱形图的方向调整为水平。

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 绘制水平箱形图
plt.boxplot(data, vert=False, labels=['A', 'B', 'C'])
plt.title('水平箱形图')
plt.show()

在上述代码中,我们生成了三组随机数据,并使用plt.boxplot函数绘制了水平箱形图。参数vert=False将方向调整为水平,labels参数用于设置每组数据的标签。

image-20240204115342645

2. 带缺口箱形图

缺口箱形图是一种能够突出异常值的箱形图。通过设置参数notch=True,我们可以创建带有缺口的箱形图。

# 生成随机数据
data = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 绘制带缺口箱形图
plt.boxplot(data, notch=True, labels=['A', 'B', 'C'])
plt.title('带缺口箱形图')
plt.show()

在上述代码中,我们使用notch=True参数创建了带有缺口的箱形图,这有助于更清晰地识别异常值。

image-20240204115817777

3. 群组箱形图

群组箱形图用于比较不同组之间的数据分布。通过调整positions参数,我们可以将多个箱形图并列或者分开显示。

# 生成随机数据
data_group1 = np.random.normal(0, 1, 100)
data_group2 = np.random.normal(3, 1, 100)

# 绘制群组箱形图
plt.boxplot([data_group1, data_group2], labels=['Group 1', 'Group 2'])
plt.title('群组箱形图')
plt.show()

在上述代码中,我们使用plt.boxplot函数同时传入两组数据,通过labels参数设置每组的标签。

image-20240204115909637

4. 堆叠箱形图

堆叠箱形图用于比较组内不同类别的数据分布。通过设置boxprops参数,我们可以在同一图中绘制多个堆叠箱形图。

# 生成随机数据
data_category1 = np.random.normal(0, 1, 100)
data_category2 = np.random.normal(0, 1, 100)

# 绘制堆叠箱形图
plt.boxplot([data_category1, data_category2], boxprops=dict(facecolor='skyblue', color='blue'), labels=['Category 1', 'Category 2'])
plt.title('堆叠箱形图')
plt.show()

在上述代码中,我们通过boxprops参数设置箱形图的颜色,实现了堆叠箱形图的效果。

5. 核密度箱形图

核密度箱形图结合了核密度估计和箱形图,更全面地呈现了数据的分布情况。通过设置showfliers参数为False,我们可以去除异常值的显示。

# 生成随机数据
data = np.random.normal(0, 1, 100)

# 绘制核密度箱形图
plt.boxplot(data, vert=False, showfliers=False)
plt.title('核密度箱形图')
plt.show()

在上述代码中,我们使用showfliers=False参数去除了异常值的显示,突显了核密度估计的效果。

6. 小提琴箱形图

小提琴箱形图结合了箱形图和核密度估计,能够更生动地展示数据的分布情况。

# 生成随机数据
data = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 绘制小提琴箱形图
plt.violinplot(data, showmedians=True)
plt.title('小提琴箱形图')
plt.show()

在上述代码中,我们使用plt.violinplot函数绘制小提琴箱形图,并通过showmedians=True参数显示中位数。

7. 组合箱形图

有时候,我们希望在同一图中展示多种箱形图,以便更全面地对比数据的特征。可以通过多次调用plt.boxplot实现组合箱形图。

# 生成随机数据
data_group1 = np.random.normal(0, 1, 100)
data_group2 = np.random.normal(3, 1, 100)
data_group3 = np.random.normal(0, 1, 100)

# 绘制组合箱形图
plt.boxplot([data_group1, data_group2], positions=[1, 2], labels=['Group 1', 'Group 2'])
plt.boxplot(data_group3, positions=[3], labels=['Group 3'])
plt.title('组合箱形图')
plt.show()

在上述代码中,我们通过多次调用plt.boxplot,分别设置不同的位置和标签,实现了组合箱形图的效果。

image-20240204115929708

8. 多子图中的炫酷箱形图

在实际应用中,我们可能需要将多个箱形图放置在同一画布上的不同子图中,以便更好地对比不同数据集或者不同特征。下面是一个创建多子图的例子:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data_group1 = np.random.normal(0, 1, 100)
data_group2 = np.random.normal(3, 1, 100)
data_group3 = np.random.normal(0, 1, 100)

# 创建包含两个子图的画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))

# 在第一个子图中绘制群组箱形图
axes[0].boxplot([data_group1, data_group2], labels=['Group 1', 'Group 2'])
axes[0].set_title('群组箱形图')

# 在第二个子图中绘制小提琴箱形图
axes[1].violinplot([data_group3], showmedians=True)
axes[1].set_title('小提琴箱形图')

# 调整子图之间的间距
plt.tight_layout()

# 展示图形
plt.show()

在上述代码中,我们使用plt.subplots创建了包含两个子图的画布,并通过nrowsncols参数指定子图的行数和列数。然后,分别在每个子图中绘制了不同类型的箱形图。

9. 动态箱形图与交互式可视化

在一些场景中,我们希望能够实现动态更新的箱形图,或者在交互式环境中进行数据探索。为此,我们可以利用Matplotlib的动画功能和交互式库来实现这些需求。

9.1 动态箱形图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation

# 生成随机数据
data = np.random.normal(0, 1, (10, 100))

# 创建画布和坐标轴
fig, ax = plt.subplots()
box = ax.boxplot(data[0])

# 更新箱形图的回调函数
def update(frame):
    box['medians'][0].set_ydata(data[frame])
    return box

# 创建动画
ani = FuncAnimation(fig, update, frames=len(data), interval=500, blit=True)

plt.title('动态箱形图')
plt.show()

在上述代码中,我们使用FuncAnimation创建了一个动画,通过更新箱形图的中位线来展示数据的变化。frames参数指定了动画的帧数,interval参数设置了每帧之间的间隔时间。

9.2 交互式小提琴箱形图

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from matplotlib.widgets import Slider

# 生成随机数据
data = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 创建画布和坐标轴
fig, ax = plt.subplots()
ax_violin = sns.violinplot(data)

# 添加滑动条
ax_slider = plt.axes([0.1, 0.01, 0.65, 0.03])
slider = Slider(ax_slider, '标准差', 1, 3, valinit=1)

# 更新小提琴图的回调函数
def update(val):
    std = slider.val
    data = [np.random.normal(0, std, 100) for std in range(1, 4)]
    ax_violin.clear()
    ax_violin = sns.violinplot(data)
    plt.draw()

# 绑定回调函数
slider.on_changed(update)

plt.title('交互式小提琴箱形图')
plt.show()

在上述代码中,我们使用Seaborn库的小提琴图,并结合Matplotlib的滑动条实现了交互式的小提琴箱形图。通过调整滑动条,我们可以动态改变数据的标准差,从而观察数据分布的变化。

这种交互式可视化的方式为数据分析提供了更直观的工具,让用户能够更灵活地探索数据的特性和趋势。希望这部分内容对于实际应用中的动态箱形图和交互式可视化有所启发。

总结

在本篇技术博客中,我们深入探讨了Matplotlib库中不同种类的炫酷箱形图及其绘制方法。通过详细介绍各种箱形图的参数和实际代码示例,读者可以更好地理解如何在数据可视化中应用这些强大的工具。

我们从基础的水平箱形图、带缺口箱形图、群组箱形图、堆叠箱形图,到更高级的核密度箱形图、小提琴箱形图,每一种箱形图都有其独特的应用场景。通过调整参数,我们可以灵活地呈现数据的分布、趋势和异常值。

此外,我们还介绍了如何在Matplotlib中创建组合箱形图、多子图中的箱形图,并实现动态箱形图与交互式可视化。这些高级应用让数据科学家和分析师能够更灵活地处理复杂的数据集,提取有价值的信息。

总体而言,Matplotlib提供了丰富的箱形图绘制功能,能够满足不同层次、不同需求的数据可视化任务。通过学习和实践,读者可以更好地运用这些知识,为自己的数据分析工作提供更有力的支持。

希望本篇博客能够激发读者对Matplotlib箱形图的兴趣,促使更多人在实际项目中灵活运用这些技能,提高数据分析和可视化的水平。祝愿读者在数据科学的道路上取得更大的成功!

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

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

相关文章

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析,先把列表找出: 2.只想要所有的播放地址,通过列表表达式循环遍历这个列表拿到每个对象,再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…

列式数据库、行式数据库简介

列式数据库、行式数据库简介 1、数据准备2、行式数据库3、列式数据库4、行式、列式存储对比 常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常…

026 打印三角形及debug

打印三角形 Scanner scanner new Scanner(System.in); System.out.print("请输入要打印的三角形的行数&#xff1a;"); int row scanner.nextInt(); // 这个循环控制三角形的行数 for (int i 1; i < row; i) {// 这个循环控制每行空格的个数for (int space r…

机器学习_无监督学习之聚类

文章目录 介绍机器学习下的分类K均值算法K值的选取:手肘法用聚类辅助理解营销数据贴近项目实战 介绍机器学习下的分类 以下介绍无监督学习之聚类 聚类是最常见的无监督学习算法。人有归纳和总结的能力&#xff0c;机器也有。聚类就是让机器把数据集中的样本按照特征的性质分组&…

PyTorch——初识PyTorch框架

本文主要介绍PyTorch的基础知识&#xff0c;PyTorch的优点&#xff0c;案例&#xff0c;PyTorch和Tensorflow的对比&#xff0c;让我们对PyTorch的框架有一个基本的了解。 1.1 为什么要选择学习PyTorch&#xff08;PyTorch的优点&#xff09;&#xff1f; 活跃度&#xff1a;逐…

[Tomcat问题]--使用Tomcat 10.x部署项目时,出现实例化Servlet类[xxx]异常

[Tomcat问题]–使用Tomcat 10.x部署项目时&#xff0c;出现实例化Servlet类[xxx]异常 本片博文在知乎同步更新 环境 OS: Windows 11 23H2Java Version: java 21.0.1 2023-10-17 LTSIDE: IntelliJ IDEA 2023.3.3Maven: Apache Maven 3.9.6Tomcat: Tomcat 10.1.18 ReleasedSer…

地理空间分析10——空间数据分析中的地理编码与Python

目录 写在开头 1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法 1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API 1.3 Python中实现代码 2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德…

vit细粒度图像分类(十)TransFG学习笔记

1.摘要 细粒度视觉分类(FGVC)是一项非常具有挑战性的任务&#xff0c;它旨在从子类别中识别对象&#xff0c;这是由于类间固有的微妙差异。现有的大部分工作主要是通过重用骨干网络提取检测到的判别区域的特征来解决这一问题。然而&#xff0c;这种策略不可避免地使管道变得复…

计算机软件能力认证考试CCF-202312-1 仓库规划

#自己跑的测试没问题&#xff0c;不知道为啥就是不能满分 原理比较绕&#xff0c;就是让数组中一行不断地与其他行进行比较&#xff0c;最终得到各自的索引 #include <iostream> using namespace std; int main() {int n;int m;cin>>n>>m; int array[n][m];…

【开源】基于JAVA+Vue+SpringBoot的免税店商城管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2 研究方法 三、系统展示四、核心代码4.1 查询免税种类4.2 查询物品档案4.3 新增顾客4.4 新增消费记录4.5 审核免税 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的免税店商城管理系…

新产品!可视化试卷搭建平台

hi, 大家好, 我是徐小夕. 之前和大家分享了很多可视化低代码和零代码的技术实现和产品设计思路, 也和大家分享了 H5-Dooring 零代码搭建平台的技术实现和未来规划, 今天继续和大家分享一下我们的新产品——橙子试卷. 橙子试卷 是一款可视化试卷/问卷搭建平台, 我们可以通过拖拽…

51单片机编程应用(C语言):矩阵键盘

16个按键只要8个I/O口&#xff0c;本来16个按键要16个I/O口。 矩阵键盘可以按行扫描也可以按列扫描&#xff0c;扫描原理很简单&#xff0c;变成之前的独立按键&#xff0c;比如 按行扫描&#xff0c;看原理图如下&#xff0c;我们P170,另外三个置1&#xff0c;那么第一行就选…

69.请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?

69.请描述Spring MVC的工作流程&#xff1f;描述一下 DispatcherServlet 的工作流程&#xff1f; 核心架构的具体流程步骤如下&#xff1a; 首先用户发送请求——>DispatcherServlet&#xff0c;前端控制器收到请求后自己不进行处理&#xff0c;而是委托给其他的解析器进行…

onnx转换为rknn置信度大于1,图像出现乱框问题解决

前言 环境介绍&#xff1a; 1.编译环境 Ubuntu 18.04.5 LTS 2.RKNN版本 py3.8-rknn2-1.4.0 3.单板 迅为itop-3568开发板 一、现象 采用yolov5训练并将pt转换为onnx&#xff0c;再将onnx采用py3.8-rknn2-1.4.0推理转换为rknn出现置信度大于1&#xff0c;并且图像乱框问题…

速过计算机二级python——第五讲:函数与类库

第五讲&#xff1a;函数与类库 第五讲&#xff1a;函数与类库函数定义实参变量的作用域返回值代码复用 类创建和使用类继承导入类 模块与库概念标准库第三方库 第五讲&#xff1a;函数与类库 函数 定义 函数就是代码块&#xff0c;只不过我们给这个代码块特地进行命名&#…

Fink CDC数据同步(三)Flink集成Hive

1 目的 持久化元数据 Flink利用Hive的MetaStore作为持久化的Catalog&#xff0c;我们可通过HiveCatalog将不同会话中的 Flink元数据存储到Hive Metastore 中。 利用 Flink 来读写 Hive 的表 Flink打通了与Hive的集成&#xff0c;如同使用SparkSQL或者Impala操作Hive中的数据…

python Flask 写一个简易的 web 端程序(附demo)

python Flask 写一个简易的 web 端程序 &#xff08;附demo&#xff09; 介绍简单介绍装饰器 app.route("/") 进阶增加接口设置端口 静态网页核心代码完整代码 介绍 Flask 是一个用于构建 Web 应用程序的轻量级 Python Web 框架。它设计简单、易于学习和使用&#x…

【30秒看懂大数据】数据指标

公众号&#xff1a;知幽科技 PS:本文属专栏第24篇 简单说 数据指标是指对企业经营数据转化为可量化、可衡量、可对比、可预测的一个度量或者维度同称。 举例理解 你在小区门口开了一家馒头店。 开业第一天你算了下一共卖了50个馒头&#xff0c;一共收款100元&#xff0…

今日arXiv最热NLP大模型论文:引入噪声,可提升RAG检索效果超30%??

检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称RAG&#xff09;系统的出现&#xff0c;提高了LLMs回答生成的准确性。它分为两个部分:检索与生成。检索即利用检索器从海量文档中检索出与查询最相关或者最相似的段落&#xff0c;而生成则是LLMs针对混…

幻兽帕鲁客户端存档文件 - 云上备份和恢复教程

本文将详细介绍如何将幻兽帕鲁游戏客户端的存档文件备份至云端&#xff0c;以及如何从云端恢复存档数据至本地。 一、游戏存档备份场景 幻兽帕鲁的游戏进度存储在电脑本地磁盘上&#xff0c;游戏中创建的每个世界都对应一个本地存档文件夹。在玩游戏过程中&#xff0c;客户端…