Matplotlib | 理解直方图中bins表示的数据含义

  • 引出问题
  1. hist作图中 bins 发生变换 y轴的数据也变化 想不通 不是说y轴计算的是频率吗 频率既然是定值 为什么y轴的数据就还会变化?
  2. 那我确定了bins的数值 我想获得bins内各个柱子(bin)中数据点的数量如何获得

bins的变化

先看一组数据

data['Class'].value_counts()
Class
0    284315
1       492
Name: count, dtype: int64
  • 画直方图

f, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(16,4)) # 共享x轴
bins = 30ax1.hist(data["Amount"][data["Class"]== 1], bins = bins)ax1.set_title('Fraud')ax2.hist(data["Amount"][data["Class"] == 0], bins = bins)
ax2.set_title('Normal')plt.xlabel('Amount ($)')
plt.ylabel('Number of Transactions')
plt.yscale('log')
plt.show()

在这里插入图片描述
查看当bins=30时,各个柱子内数据点的数量

# 计算欺诈交易的直方图
fraud_hist_values, fraud_bin_edges = np.histogram(data["Amount"][data["Class"] == 1], bins=bins)# 计算正常交易的直方图
normal_hist_values, normal_bin_edges = np.histogram(data["Amount"][data["Class"] == 0], bins=bins)# 打印每个 bin 中的数据点数量
print("Fraud transactions in each bin:", fraud_hist_values)
print("Normal transactions in each bin:", normal_hist_values)
Fraud transactions in each bin: [316  74  20  16  18   6   7   5   5   2   9   3   0   1   1   1   0   11   3   0   1   0   0   0   1   0   0   0   1]
Normal transactions in each bin: [280387   2917    599    208    110     42     19      8      9      62      2      0      2      0      1      0      0      0      00      0      2      0      0      0      0      0      0      1]

这样看数据的结果 相对难理解 直接放入极端情况 bins=1

Fraud transactions in each bin: [492]
Normal transactions in each bin: [284315]

在这里插入图片描述

matplotlibseabornhist 函数中,Y 轴表示的是每个柱子(bin)中数据点的数量(频数),或者是这些数量的估计概率密度(如果使用了密度标准化)。当您改变 bins 参数时,Y 轴的数据确实会发生变化,原因如下:

  1. 改变 bins 的数量

    • 当您增加或减少 bins 的数量时,您实际上是在改变数据的分组方式。更多的 bins 意味着每个柱子覆盖的值范围更小,这可能导致某些柱子的高度增加或减少,因为数据点被分配到了更多的组中。
  2. 改变 bins 的宽度

    • bins 的宽度直接影响每个柱子的范围。如果 bins 太宽,可能会错过数据的细微变化;如果 bins 太窄,可能会过度强调数据的随机波动。
  3. Y 轴的解释

    • 如果您没有对直方图进行任何标准化,Y 轴显示的是每个 bin 中的计数(频数)。这意味着,如果您有更多的 bins,每个柱子的高度可能会更低,因为数据点被分散到了更多的柱子中。
    • 如果您对直方图进行了密度标准化(例如,通过设置 density=True),Y 轴显示的是估计的概率密度。在这种情况下,直方图的总面积将等于 1,而每个柱子的高度将根据 bins 的宽度进行调整,以保持总面积不变。

示例代码

import matplotlib.pyplot as plt
import numpy as np# 生成随机数据
data = np.random.randn(1000)# 不同的 bins 数量
plt.figure(figsize=(12, 6))# 较少的 bins
plt.subplot(1, 2, 1)
plt.hist(data, bins=10, alpha=0.5, label='10 bins')
plt.legend()# 较多的 bins
plt.subplot(1, 2, 2)
plt.hist(data, bins=30, alpha=0.5, label='30 bins')
plt.legend()plt.show()

在这里插入图片描述

在这个例子中,您可以看到,当 bins 的数量从 10 增加到 30 时,每个柱子的高度和宽度都发生了变化。

结论

Y 轴的数据会随着 bins 参数的变化而变化,因为 bins 参数直接影响数据的分组方式和每个柱子的范围。理解这一点对于正确解释直方图和选择适当的 bins 数量非常重要。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】基础02

Linux编译和调试 VI编辑文件 vi : 进入文件编辑 是命令行模式 i :从光标处进入插入模式 dd : 删除光标所在行 n dd 删除指定行数 Esc : 退出插入模式 : 冒号进入末行模式 :wq : 保存退出 :q : 未修改文件可以退出 :q! …

Linux网络——套接字编程

1. 网络通信基本脉络 基本脉络图如上,其中数据在不同层的叫法不一样,比如在传输层时称为数据段,而在网络层时称为数据报。我们可以在 Linux 中使用 ifconfig 查看网络的配置,如图 其中,inet 表示的是 IPv4,…

深度学习的实践层面

深度学习的实践层面 设计机器学习应用 在训练神经网络时,超参数选择是一个高度迭代的过程。我们通常从一个初步的模型框架开始,进行编码、运行和测试,通过不断调整优化模型。 数据集一般划分为三部分:训练集、验证集和测试集。常…

Jmeter 如何导入证书并调用https请求

Jmeter 如何导入证书并调用https请求 通过SSL管理器添加证书文件 支持添加的文件为.p12,.pfx,.jks 如何将pem文件转换为pfx文件? 在公司内部通常会提供3个pem文件。 ca.pem:可以理解为是根证书,用于验证颁发的证…

LabVIEW 温湿度测试与监控系统

煤炭自燃是煤矿和煤炭储存领域面临的重大安全隐患,尤其是在煤炭堆积和运输过程中,温湿度变化会直接影响煤体的氧化速率和自燃倾向。传统的监测手段通常存在实时性差、数据处理复杂等问题,难以准确评估煤自燃的风险。因此,设计了一…

IDEA 开发工具常用快捷键有哪些?

‌在IDEA中,输出System.out.println()的快捷键是sout,输入后按回车(或Tab键)即可自动补全为System.out.println()‌‌。 此外,IDEA中还有一些其他常用的快捷键: 创建main方法的快捷键是psvm,代…

KF UKF

我需要Kalman 现在,主要是用来处理检测问题情况里的漏检,因为模拟了一段2D, (x,y)的数据,为了看效果,画的线尽量简单一点: import numpy as np import matplotlib.pyplo…

多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系

在当今快速发展的智慧城市和数字化转型浪潮中,视频监控技术已成为提升公共安全、优化城市管理、增强应急响应能力的重要工具。EasyCVR视频监控平台以其强大的多协议接入能力和多样化的视频流格式分发功能,为用户提供了一个全面、灵活、高效的视频监控解决…

第8章硬件维护-8.2 可维护性和可靠性验收

8.2 可维护性和可靠性验收 可维护性和可靠性验收非常重要,硬件维护工程师在后端发现问题后,总结成可维护性和可靠性需求,在产品立项的时候与新特性一起进行需求分析,然后经过设计、开发和测试环节,在产品中落地。这些需…

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室 语义分割网络FCN:通过将全连接层替换为卷积层并使用反卷积上采样,实现了第一个端到端的像素级分割网络U-Net:采用对称的U形编解码器结构&#xff…

如何解决多系统数据重复与冲突问题?

多系统并行运作已成为现代企业的常态。企业通常同时使用ERP、CRM、HR等多个业务系统来管理不同的功能模块。然而,这种多系统环境也带来了一个常见且棘手的问题:数据重复与矛盾。由于各系统独立运行且缺乏有效的集成机制,不同系统间的数据容易…

麒麟时间同步搭建chrony服务器

搭建chrony服务器 在本例中,kyserver01(172.16.200.10)作为客户端,同步服务端时间;kyserver02(172.16.200.11)作为服务端,提供时间同步服务。 配置服务端,修改以下内容…

【GPTs】Ai-Ming:AI命理助手,个人运势与未来发展剖析

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 💯GPTs指令💯前言💯Ai-Ming主要功能适用场景优点缺点 💯小结 💯GPTs指令 中文翻译: defcomplete_sexagenary(年&a…

Chainlit快速实现AI对话应用将聊天记录的持久化到MySql关系数据库中

概述 默认情况下,Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新,所有的聊天记录,页面上的所有聊天记录都会消失。但是,存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 之前写过一篇文章《Chainlit快速…

【动手学深度学习Pytorch】6. LeNet实现代码

LeNet(LeNet-5)由两个部分组成:卷积编码器和全连接层密集块 x.view(): 对tensor进行reshape import torch from torch import nn from d2l import torch as d2lclass Reshape(torch.nn.Module):def forward(self, x):return x.view(-1, 1, 28…

AI工具百宝箱|任意选择与Chatgpt、gemini、Claude等主流模型聊天的Anychat,等你来体验!

文章推荐 AI工具百宝箱|使用Deep Live Cam,上传一张照片就可以实现实时视频换脸...简直太逆天! Anychat 这是一款可以与任何模型聊天 (chatgpt、gemini、perplexity、claude、metal llama、grok 等)的应用。 在页面…

Excel数据动态获取与映射

处理代码 动态映射 动态读取 excel 中的数据,并通过 json 配置 指定对应列的值映射到模板中的什么字段上 private void GetFreightFeeByExcel(string filePath) {// 文件名需要以快递公司命名 便于映射查询string fileName Path.GetFileNameWithoutExtension(fi…

SRP 实现 Cook-Torrance BRDF

写的很乱! BRDF(Bidirectional Reflectance Distribution Function)全称双向反射分布函数。辐射量单位非常多,这里为方便直观理解,会用非常不严谨的光照强度来解释说明。 BRDF光照模型,上反射率公式&#…

[代码随想录Day16打卡] 找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树

找树左下角的值 定义:二叉树中最后一行最靠左侧的值。 前序,中序,后序遍历都是先遍历左然后遍历右。 因为优先遍历左节点,所以递归中因为深度增加更新result的时候,更新的值是当前深度最左侧的值,到最后就…

【第七节】在RadAsm中使用OllyDBG调试器

前言 接着本专栏上一节,我们虽然已经用上RadAsm进行编写x86汇编代码并编译运行,但是想进行断点调试怎么办。RadAsm里面找不到断点调试,下面我们来介绍如何在RadAsm上联合调试器OllyDBG进行调试代码。 OllyDBG的介绍与下载 OllyDBG 是一款功能…