You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中对2D Histogram指定区域进行积分统计

解决2D直方图特定区间积分问题及代码冗余优化

代码冗余问题说明

你先通过np.linspace生成了自定义的分箱边界数组x_bins和y_bins,但随后又将这两个变量重新赋值为整数100,直接覆盖了之前的分箱设置,这属于冗余代码。如果想使用自定义的分箱区间(从数据最小值到指定最大值,分成100个bin),应该保留linspace的结果,而非重新赋值。

特定区间积分统计数据点的方法

plt.hist2d函数会返回四个核心值:

  • counts: 二维数组,每个元素对应对应bin内的数据点数量
  • xedges: x轴方向的bin边界数组
  • yedges: y轴方向的bin边界数组
  • image: 绘制的图像对象

我们可以利用这些返回值,定位目标区间对应的bin位置,再对counts的对应区域求和,得到该区间内的数据点总数。

修改后的完整代码示例

import numpy as np
import matplotlib.pyplot as plt

# 假设E和Eint是已有的数据数组
# E = ...
# Eint = ...

# 定义x、y轴的分箱范围
x_min = np.min(E)
x_max = 1000
y_min = np.min(Eint)
y_max = 0.6

# 生成自定义分箱边界(分成100个bin)
x_bins = np.linspace(x_min, x_max, 100)
y_bins = np.linspace(y_min, y_max, 100)

fig, ax = plt.subplots(figsize=(10,7))

# 获取hist2d的返回值,这是统计区间数据的关键
counts, xedges, yedges, im = plt.hist2d(E, Eint, bins=[x_bins, y_bins], cmap=plt.cm.RdBu)
plt.colorbar()
plt.show()

# 定义你需要统计的目标区间,示例为x∈[200,500],y∈[0.2,0.4]
target_x_low, target_x_high = 200, 500
target_y_low, target_y_high = 0.2, 0.4

# 找到目标区间对应的bin索引
x_left_idx = np.digitize(target_x_low, xedges) - 1  # 减1适配左闭右开的bin边界规则
x_right_idx = np.digitize(target_x_high, xedges)
y_bottom_idx = np.digitize(target_y_low, yedges) - 1
y_top_idx = np.digitize(target_y_high, yedges)

# 对目标区域的counts求和,得到数据点总数
total_points = np.sum(counts[x_left_idx:x_right_idx, y_bottom_idx:y_top_idx])

print(f"目标区间内的数据点总数:{total_points}")

代码说明

  1. 保留np.linspace生成的分箱边界,确保分箱符合你最初的范围设定
  2. 通过plt.hist2d的返回值获取每个bin的计数和边界信息
  3. 使用np.digitize定位目标区间对应的bin位置,注意索引调整以适配bin的左闭右开规则
  4. 对counts的子数组求和,直接得到目标区间内的总数据点数量

内容的提问来源于stack exchange,提问作者Moaning Salmon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:24:25