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

Python绘制距离数据分布图的正确实现方法(现有代码问题排查)

原有代码错误说明
  • 取数错误:z = A[0] 只读取了文件中第一个距离值,基于单个值计算直方图自然无法得到正确分布,应该直接使用读取到的全部数据A
  • 切片逻辑错误:计算bin中心和宽度时使用edges[:1](仅取edges数组第一个元素),正确写法为edges[:-1](取edges数组除最后一个元素外的所有值),否则数组长度不匹配会触发广播错误
  • bin数量不合理:总共有26条数据,设置100个bins会导致绝大多数bin为空,无法体现真实分布特征
  • 冗余导入:代码中导入的spline、scipy.stats等模块未实际使用,可以删除
可直接运行的正确代码
import numpy as np
import matplotlib.pyplot as plt 

# 读取全部距离数据
A = np.loadtxt('abc.txt')
# 计算直方图,设置适配数据量的bin数量
hist, edges = np.histogram(A, bins=8)
# 计算每个bin的中心点
bin_centers = (edges[:-1] + edges[1:]) / 2
# 计算每个bin的宽度
bin_widths = edges[1:] - edges[:-1]

# 绘制直方图
plt.bar(bin_centers, hist, width=bin_widths, edgecolor='black', alpha=0.7)
# 绘制分布趋势线
plt.plot(bin_centers, hist, 'r-o', linewidth=2)
# 设置坐标轴标签
plt.xlabel('距离')
plt.ylabel('频次')
# 添加网格辅助读数
plt.grid(axis='y', alpha=0.3)
plt.show()

如果需要绘制带核密度估计的平滑分布曲线,可使用如下扩展代码:

import numpy as np
import matplotlib.pyplot as plt 
from scipy.stats import gaussian_kde

A = np.loadtxt('abc.txt')
# 创建画布和双坐标轴
fig, ax1 = plt.subplots()

# 绘制频次直方图
ax1.hist(A, bins=8, edgecolor='black', alpha=0.7)
ax1.set_xlabel('距离')
ax1.set_ylabel('频次', color='tab:blue')
ax1.tick_params(axis='y', labelcolor='tab:blue')

# 绘制核密度估计曲线
ax2 = ax1.twinx()
kde = gaussian_kde(A)
x_range = np.linspace(A.min(), A.max(), 100)
density = kde(x_range)
ax2.plot(x_range, density, 'r-', linewidth=2)
ax2.set_ylabel('密度', color='tab:red')
ax2.tick_params(axis='y', labelcolor='tab:red')

plt.title('距离数据分布')
plt.show()

内容的提问来源于stack exchange,提问作者Dilip.H.N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:48:02