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

如何用Python为两列文本数据构建100keV宽度分箱的直方图

用Python创建固定宽度(100keV)的直方图

要实现固定分箱宽度的直方图,核心是直接基于指定宽度生成分箱边界,而非通过极值计算分箱数。先明确数据单位:从你提供的数值来看,第二列能量值大概率是GeV(0.0001GeV = 100keV),以下是完整实现代码:

步骤1:导入依赖库

import numpy as np
import matplotlib.pyplot as plt

步骤2:读取文本数据

# 读取文件,跳过换行转义符\,仅提取第二列的能量数据
energy_data = np.loadtxt("your_data_file.txt", comments='\\', usecols=(1,))

步骤3:生成固定宽度的分箱

# 定义分箱宽度:100keV = 0.0001GeV
bin_width = 0.0001  # 若数据单位是keV,直接设为100即可

# 计算分箱边界:覆盖所有数据的最小/最大范围,步长为固定宽度
min_e = energy_data.min()
max_e = energy_data.max()

bins = np.arange(
    np.floor(min_e / bin_width) * bin_width,
    np.ceil(max_e / bin_width) * bin_width + bin_width,
    bin_width
)

步骤4:绘制直方图

# 绘制直方图,添加边界线区分分箱
plt.hist(energy_data, bins=bins, edgecolor='black')

# 设置坐标轴标签(可根据单位调整)
plt.xlabel('Energy (keV)')
plt.ylabel('Count')
plt.title('Histogram with 100keV Bins')

# 转换x轴刻度为keV(若原始数据是GeV)
plt.xticks(bins, [f"{b * 1000000:.0f}" for b in bins])

plt.show()

可选:仅统计分箱计数(不绘图)

如果只需要获取每个分箱的计数和边界,无需绘图:

counts, bin_edges = np.histogram(energy_data, bins=bins)
print("分箱边界:", bin_edges)
print("各分箱计数:", counts)

关键说明

  • 使用np.arange生成固定步长的分箱是核心,这避免了你之前通过极值计算分箱数的错误(该方法仅适用于固定分箱数场景,而非固定宽度)
  • comments='\\'参数用于处理数据中存在的换行转义符\,确保数据读取正常

内容的提问来源于stack exchange,提问作者Rhit.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:52:38