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

Python如何基于分箱binning和频率表绘制直方图histogram

基于已有的分箱和频率表绘制直方图的实现方法

你已经完成了分箱和频率统计,不需要再使用hist方法的自动统计逻辑,直接用条形图即可模拟出完全一致的直方图效果,具体实现代码如下:

import pandas as pd
import matplotlib.pyplot as plt

freq = [3,14,21,12,6]
i = pd.interval_range(start=50, freq=10, end=100, closed='left')
df = pd.DataFrame(index=i, data=freq)
df.columns = ['Freq']
df.index.name = 'Class'
df.columns.name = 'Column'
print(df)

# 绘制直方图部分
# 取每个区间的左端点作为x轴位置
x = [interval.left for interval in df.index]
# 条形宽度设为区间长度,和直方图效果一致
width = 10

plt.bar(x, df['Freq'], width=width, align='edge', edgecolor='black')
# 设置x轴刻度为区间标签,更易读
plt.xticks(x, labels=df.index, rotation=45)
plt.xlabel('分箱区间')
plt.ylabel('频率')
plt.title('基于预计算分箱和频率的直方图')
plt.tight_layout()
plt.show()

实现逻辑说明

  • 因为已经提前统计好每个分箱的频率,直接使用plt.bar绘制是最高效的方式,不需要重复做统计计算
  • align='edge'参数让条形的边缘对齐分箱边界,完全贴合直方图的展示逻辑
  • 加入edgecolor='black'给每个条形加边框,和常规直方图的展示样式统一

如果你确实需要调用hist方法实现,也可以通过还原模拟原始数据的方式实现,代码如下:

# 还原模拟原始数据:每个区间的数值重复对应的频率次数
raw_data = []
for interval, count in zip(df.index, df['Freq']):
    raw_data.extend([interval.left] * count)

# 调用hist方法绘制,指定和之前一致的分箱边界
plt.hist(raw_data, bins=[50,60,70,80,90,100], edgecolor='black')
plt.xlabel('分箱区间')
plt.ylabel('频率')
plt.show()

内容的提问来源于stack exchange,提问作者Say OL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:04