Matplotlib - Statistical Distribution作图

news2025/2/25 11:26:54

1. 前言

在数据分析和统计学中,绘制统计分布图是非常重要的,因为它帮助我们直观地理解数据的特性,并为进一步的分析提供基础。统计分布图能够揭示数据集的结构、趋势、集中趋势和离散程度等信息,从而使我们更容易做出合理的假设、判断和决策。

2. hist直方图

适用于不同样本来源的比较,小数据集,不同样本间的数据分布比较

或同一来源数据集作图选择合适统计模型

直方图是一个常用的工具,用于展示单个变量的分布。它将数据按区间(bins)划分,并通过条形图展示每个区间内数据的频率或数量。

2.1 直方图的使用场景

1. 查看数据分布

直方图最常用的场景是查看数值型数据的分布情况。通过直方图可以直观了解数据是偏向于正态分布、偏态分布,还是存在多个峰值(多峰分布)

2. 选择合适的统计模型

通过直方图的形状,可以帮助确定数据是否适合某种统计模型。例如,判断数据是否符合正态分布、均匀分布或指数分布等。

3. 比较多个数据集的分布

直方图还可以用于比较多个数据集的分布。通过叠加或并排显示不同数据集的直方图,可以对比它们的分布差异

2.2 代码与图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=30, alpha=0.7, color='b')

# 添加标题和标签
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 显示图像
plt.show()

2.3 常见参数

bins指定数据区间的数量
alpha用于设置透明度,多个图形叠加时最好使用
color用于设置柱形的颜色
edgecolor设置图形元素的边缘颜色
linewidth控制线条的宽度,单位为point

3. boxplot箱形图

适用于同一样本来源,大小数据集皆可,内部不同时间/状况的样本比较

显示一组数据的分布情况和统计特征,特别是用于比较不同数据集的分布。它通过显示数据的 五个数值摘要(最小值、下四分位数、中位数、上四分位数、最大值),以及识别异常值,帮助我们快速了解数据的分布、离散程度、中心趋势等信息。

3.1 使用场景

1. 数据分布的可视化

同时展示多个数据集的分布情况(如不同实验组、不同变量的结果)。

适合用来查看数据的对称性、偏态以及是否存在异常值。

2. 数据的对比

可以通过比较多个箱线图,直观地对比不同组数据的中心趋势、变异性和分布

例如,比较两个班级的考试成绩分布、不同产品的销售额分布。

3. 检测异常值

快速发现数据中的异常值(outliers)。位于箱线图“胡须”之外的数据点即为异常值,帮助分析潜在的极端情况。

4. 查看数据的集中趋势和离散程度

直观地看到数据的中位数和四分位数,判断数据的集中趋势和离散程度。

适合用于非对称分布数据的可视化,例如工资分布、房价分布等。

3.2 异常点分析

是的,boxplot 中的异常值通常是指超出 1.5 倍四分位距(IQR, Interquartile Range)范围的数据点。具体来说,IQR 是上四分位数(Q3)和下四分位数(Q1)之间的距离,即:

1.5 倍的 IQR 是一个常用的标准,用于标识数据中的异常值。这个标准来源于统计学中对数据分布的一个经验法则。

 3.3 代码与作图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
np.random.seed(10)
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
data3 = np.random.normal(80, 15, 200)

# 绘制箱线图
plt.boxplot([data1, data2, data3], patch_artist=True, widths=0.6, 
            boxprops=dict(facecolor='lightblue'), 
            medianprops=dict(color='red', linewidth=2), 
            whiskerprops=dict(color='green'))

# 添加标题
plt.title("Boxplot Example")
plt.xticks([1,2,3],['A','B','C']) #指定修改标签

# 显示图形
plt.show()

3.4 相关参数

vert

设置箱线图的方向。True为垂直,False为水平

patch_artist是否填充箱体,为True则填充
showfliers是否显示异常值
widths箱线图的宽度
positions图所在的位置。position=[1,2,4]
boxprops控制箱体的样式,boxprops=dict(facecolor='',color='')
flierprops设置异常值的样式,传入字典
showmeans是否显示数据的均值

4. errorbar误差条

适用于同一样本来源,小数据集,比较内部数据

误差条是用来展示每个数据的浮动误差,显示测量误差或者不确定性

4.1 使用场景

  • 测量误差:当你有测量数据时,通常需要显示每个数据点的误差范围。error可以在数据点上添加误差条,帮助显示这些测量误差。

  • 数据的不确定性:在科学实验或数据分析中,数据的准确性可能受到各种因素的影响,errorbar 可以帮助你表示这些不确定性。

  • 比较数据:当你比较不同实验组或条件下的数据时,误差条可以帮助你更好地理解数据的变异性和可靠性。

4.2 代码与作图

#errorbar
x = [2,4,6]
y = [3,7,11]
yerr = [0.3,0.5,0.9]

fig,ax = plt.subplots()
ax.errorbar(x,y,yerr,fmt='o',linewidth=3,capsize=10)

4.3 相关参数

fmt设置数据点的标记样式
ecolor设置误差线的颜色
linewidth设置误差线的宽度
capsize设置误差端点的长度
xerrx轴数据的误差
yerry轴数据的误差

5. violinplot小提琴图

5.1 简介

同一样本或不同样本比较均可使用

Violin图是结合了箱线图和核密度线的图片,展示数据的分布情况。

核密度线(KDE):Violin的形状代表数据的分布密度。越宽表示该值附近的数据点多,窄就表示越少

两侧对称:左右分布是一样的,使图形更容易解读

5.2 代码与作图

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

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

# 使用 seaborn 绘制 violin 图
sns.violinplot(data=data)

# 显示图形
plt.show()

6. pie饼状图

适用于同一样本来源,小数据集,内部种类比较

饼图适用于展示数据中各部分在整体中所占比例的场景。它能够直观地展示每个部分的相对大小,适合少量分类数据的可视化。

6.1 使用场景

1. 比例分析

当你想展示数据集中不同类别的占比,如市场份额、预算分配、人口构成等,饼图是很合适的选择。例如,展示公司不同产品线的销售额占比。

2. 数据种类较少

饼图通常只适用于少量分类数据(一般不超过 5-6 类)。如果分类过多,饼图会显得杂乱且难以阅读。

6.2 代码与作图

import matplotlib.pyplot as plt

# 数据
sizes = [15, 30, 45, 10]
labels = ['Apples', 'Bananas', 'Cherries', 'Dates']
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0, 0.1, 0, 0)  # 'Bananas' 部分稍微爆开

# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=True, startangle=140)

# 确保饼图为圆形
plt.axis('equal')

# 添加标题
plt.title("Fruit Consumption Pie Chart")

# 显示图形
plt.show()

6.3 相关参数

labelslabel=['A','B'],添加标签
color自定义块的颜色
autopct显示每个部分的百分比
explodeexplode=[0,0.1,0,0],设置每部分是否分离,分离的距离
shadow添加阴影效果
radius设置饼图的半径
pctdistance设置百分比标签与饼图中心的距离

7. hist2d二维直方图

适用于大数据集,同一样本来源的内部数据分布比较

适用于将两个变量的分布情况在二维平面上进行可视化。该函数会根据传入的两个变量,将数据按网格进行划分,并统计每个网格中的数据点数,最终生成一个二维热图。

7.1 使用场景

1. 分析两个连续变量之间的关系

当你有两个连续变量并想观察它们之间的相关性或分布模式时,hist2d() 是很好的工具。它会把数据分成网格(bins),并显示每个网格内的数据点数量。

2. 大规模数据集

将数据分箱处理,把数据点密集的区域以颜色浓度来表示,能够更加清晰地显示数据分布。

3. 数据量大的情况下替代散点图

如果数据量过大,散点图的点可能会重叠,导致图形难以解释。hist2d() 可以通过统计数据点数量,以颜色的深浅来表示点的密集程度,能够更好地处理数据重叠的问题。

7.2 代码与作图

import matplotlib.pyplot as plt
import numpy as np

# 生成一些随机数据
x = np.random.randn(10000)  # 横轴数据
y = np.random.randn(10000)  # 纵轴数据

# 绘制二维直方图
plt.hist2d(x, y, bins=30, cmap='Blues')

# 添加颜色栏
plt.colorbar(label='Counts')

# 显示图形
plt.show()

7.3 相关参数

bins设置每个维度上的箱子数,也决定了网格的分辨率,(3,4)
range定义二维直方图的范围
cmap颜色映射,用于指定不同箱子计数的颜色,'Blues','Reds'
density返回的数据归一化,总面积为1
cmin设定颜色强度的最小值,小于将被设置为透明

8. hexbin蜂窝图

适用于大数据集,同一样本来源的内部数据分布比较

8.1 简介

与hist2d效果相似,都用于可视化二维数据的分布情况

使用的是 六边形网格,将数据划分为蜂窝状的六边形区域。这使得视觉上更加紧凑,六边形网格在表示连续数据分布时可以减少“边界效应”,在某些情况下能比矩形网格更好地展示数据分布。

8.2 代码与作图

import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
x = np.random.randn(10000)
y = np.random.randn(10000)

# 绘制六边形分箱图
plt.hexbin(x, y, gridsize=30, cmap='Blues')
plt.colorbar(label='Counts')
plt.title('hexbin Example')
plt.show()

9. ecdf累计概率密度图

适用于小数据集,同一样本来源中数据大小分布比较

展示了数据集中每个数据点的值在整体数据中的累积百分比,即有多少比例的数据点小于等于某个值。

9.1 特点

  • 1. 累积分布:ECDF 图展示的是每个数据点的值和它在整个数据集中的相对排名(累积百分比)。因此,纵轴(y 轴)表示的是累积概率,范围从 0 到 1,横轴(x 轴)是数据点的值。

  • 2. 每个数据点对应一个累积概率:图中的每一个点表示一个数据点和它在数据集中所占的比例。例如,某个点的 y 值是 0.6,意味着 60% 的数据点小于或等于这个点的 x 值。

  • 3. 对数据分布的完整描述:与直方图和密度图不同,ECDF 图展示了 每个数据点 的信息,避免了由于数据分箱导致的失真,因此它保留了数据的精确信息,适合小数据集。

9.2 代码与作图

a = np.random.normal(4,2,10)
print(a)
fig,ax = plt.subplots()
ax.ecdf(a)

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

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

相关文章

监控系统添加vcenter上的esxi主机

监控系统的软件选择: 监控系统要求 快速搭建 能快捷地添加vcenter上的主机(esxi) 能实现动态添加主机监控 可供选择的监控软件 Prometheus vmware_exporter添加 vcenter及esxi监控,报奇怪的错误,解决时间比较长&a…

高阶数据结构之哈希表基础讲解与模拟实现

程序猿的读书历程:x语言入门—>x语言应用实践—>x语言高阶编程—>x语言的科学与艺术—>编程之美—>编程之道—>编程之禅—>颈椎病康复指南。 前言: 哈希表(Hash Table)是一种高效的键值对存储数据结构&…

C++(进阶) ─── 继承

目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱形虚拟继承 8.继…

ARCGIS PRO DSK MapTool

MapTool用于自定义地图操作工具,使用户能够在ArcGIS Pro中执行特定的地图交互操作。添加 打开MapTool1.vb文件,可以看到系统已经放出MapTool1类: Public Sub New()将 IsSketchTool 设置为 true 以使此属性生效IsSketchTool TrueSketchTyp…

秋招测评为什么有行测题型?有没有训练题库?

为什么有行测题型,那这就得看看行测题型的作用了。 1、行测题可以比较全面评估应聘者的基本素质,包括数学能力、语言能力、逻辑思维能力等。这些能力是从事各类职业所必需的基本能力,对于判断应聘者的学习潜力和工作效率具有重要意义。 2、…

MySQL基于GTID同步模式搭建主从复制

系列文章目录 rpmbuild构建mysql5.7.42版本的rpm包 文章目录 系列文章目录一、mysql-5.7.42RPM包构建二、同步模式分类介绍1.异步同步模式2.半同步模式2.1.实现半同步操作流程2.2.半同步问题总结2.3.半同步一致性2.4.异步与半同步对比 3.GTID同步 三、GTID同步介绍1.gtid介绍2…

如何准备多台虚拟机并配置集群化软件

在搭建集群化软件的过程中,首先需要准备好多台Linux服务器。本文将详细介绍如何使用VMware提供的克隆功能来准备多台虚拟机,并进行必要的配置以实现集群化软件的部署。 1. 准备多台虚拟机 安装集群化软件,首要条件就是要有多台Linux服务器可…

nvm无法下载npm的问题

1、问题 执行 nvm install 14.21.3 命令,node可以正常下载成功,npm下载失败 2、nvm配置信息 …/nvm/settings.txt root: D:\soft\nvm path: D:\soft\nodejs node_mirror: npmmirror.com/mirrors/node/ npm_mirror: registry.npmmirror.com/mirrors/…

Java面试篇基础部分-Java内部类介绍

首先需要了解什么是内部类,内部类就是定义在类的内部的类称为内部类,内部类可以根据不同的定义方式分为静态内部类、成员内部类、局部内部类和匿名内部类。 静态内部类 定义在类体内部的通过static关键字修饰的类,被称为静态内部类。静态内部类可以访问外部类的静态变量和…

BEV学习---LSS-3--(体素坐标系及各种坐标系的理解)

1、体素坐标系 如下两个链接,详细介绍了对体素坐标系的理解: 体素坐标(voxel_coors)在mmdetection3d中的理解_体素坐标系-CSDN博客 3D目标检测中坐标系详解_点云用的什么坐标系-CSDN博客 2、自动驾驶中各种坐标系的定义及相互转换 【KnowledgeBase】…

lamp和nginx的搭建

lamp搭建 下载需要用到的 yum install php yum install php-mysql yum install php-mbstring 进入到html路径下,将文件复制到该路径 解压文件 将文件夹里的内容都复制到html下 在配置文件中添加页面index.php 此时打开网页提示需添加可写权限 但因为直接添加不…

Java实现发送邮件如何配置SMTP和认证信息?

Java实现发送邮件的关键要点?Java怎么实现邮件发送? Java作为一种强大的编程语言,提供了丰富的库和工具来实现邮件发送功能。AokSend将详细介绍如何在Java中配置SMTP服务器和认证信息,以实现邮件发送功能。 Java实现发送邮件&am…

企业级镜像容器的访问控制

为保障镜像制品及企业版实例安全,需要配置公网的访问控制策略,以限制通过公网访问企业版实例。 ps: 本功能只能在企业版实例使用,对于个人版实例不支持使用此功能。 操作步骤 1、登录容器镜像控制台 ; 2、在顶部菜单栏&#xf…

鱼类检测-目标检测数据集(包括VOC格式、YOLO格式)

鱼类检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1B4o8IgOmAWeQJDWpJWxqXg?pwdjaco 提取码:jaco 数据集信息介绍: 共有 2848 张图像和一一对应的标注文件 标注文…

[图论]街道赛跑

题目描述 图一表示一次街道赛跑的跑道。可以看出有一些路口(用 0 0 0 到 N N N 的整数标号),和连接这些路口的箭头。路口 0 0 0 是跑道的起点,路口 N N N 是跑道的终点。箭头表示单行道。运动员们可以顺着街道从一个路口移动到…

自测的重要性

1、把debug一遍,看看每一步变量值的变化都符合预期 2、核对需求文档,看看是不是自己的逻辑跟需求都是匹配的,有没有遗漏的细节 3、有时候配合接口的使用方去做点假数据,也是发现自己接口漏洞的好机会 发现了sql少写了个条件、发…

【Go】Go语言中的流程控制语句

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Python识别拖放的PDF文件再转成文本文件

日常工作中经常用到PDF文件,有些PDF文件的文字是不能复制的,为了复制这些文字,我们需要转化PDF文件,或者采用微信的OCR图片识别文字,这样非常不方便。为此,我编写了一个Python小程序,利用Tkinte…

基于51单片机的多功能台灯Protues仿真设计

目录 一、设计背景 二、设计要求 三、仿真演示 四、程序展示 一、设计背景 随着科技的飞速发展和智能家居的普及,传统的台灯已经难以满足现代消费者对照明设备的多样化需求。传统台灯的功能主要集中在提供基本的照明效果,其操作方式通常是通过手动调…

Langchain.js你必须要知道的核心组件

关于Langchain.js Langchain.js,在github上截止到今日已经有92k的start。之前一直偶有耳闻,但没有深入了解。今天看完后,真的是可以堪称大模型里的瑞士军刀。 LangChain由Harrison Chase于2022年10月作为开源软件项目推出,用于连…