Python绘制频率分布直方图的两种实现方式

Ada
Ada
发布时间:2026-10-13| 5人浏览过
原创

本文介绍使用Python绘制频率分布直方图的两种方法。针对数据跨度较小的情况,采用等宽区间进行展示;针对数据分布不均或范围较大的情况,支持自定义区间端点。通过具体的代码示例,展示了如何利用matplotlib库实现这两种直方图的绘制,帮助开发者快速掌握数据分布可视化的技巧。

Python绘制频率分布直方图概述

在项目开发的初期阶段,分析数据的分布情况对于探究数据内在规律至关重要。概率分布直观地反映了样本数据的形态,若能有图像辅助展示,效果将更加清晰。使用Python绘制频率分布直方图操作简便且高频实用,因此在此记录相关实现方法。Python在此类任务中展现了其代码简洁、执行高效的优点。

数据区间策略:等宽与自定义

根据数据取值范围的不同,直方图的绘制策略也有所区别。若数据跨度较小,通常采用等宽区间来展示直方图,这是最常见的处理方式;若数据取值范围较大或分布不均,则可以自定义区间端点来绘制图像。下文将分别针对这两种情况展示具体的实现方案。

第一种情况:保持区间长度相同,绘制频率分布直方图。

等宽区间直方图实现


#-*- encoding=utf-8 -*-
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')


# 按照固定区间长度绘制频率分布直方图
# bins_interval 区间的长度
# margin    设定的左边和右边空留的大小
def probability_distribution(data, bins_interval=1, margin=1):
  bins = range(min(data), max(data) + bins_interval - 1, bins_interval)
  print(len(bins))
  for i in range(0, len(bins)):
    print(bins[i])
  plt.xlim(min(data) - margin, max(data) + margin)
  plt.title("probability-distribution")
  plt.xlabel('Interval')
  plt.ylabel('Probability')
  plt.hist(x=data, bins=bins, histtype='bar', color=['r'])
  plt.show()

第二种情况:区间长度不同,绘制频率分布直方图。

自定义区间直方图实现


#-*- encoding=utf-8 -*-
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc'

# 自己给定区间,小于区间左端点和大于区间右端点的统一做处理,对于数据分布不均很的情况处理较友好
# bins   自己设定的区间数值列表
# margin  设定的左边和右边空留的大小
# label   右上方显示的图例文字
"""e
  import numpy as np
  data = np.random.normal(0, 1, 1000)
  bins = np.arange(-5, 5, 0.1)
  probability_distribution_extend(data=data, bins=bins)
"""
def probability_distribution_extend(data, bins, margin=1, label='Distribution'):
  bins = sorted(bins)
  length = len(bins)
  intervals = np.zeros(length+1)
  for value in data:
    i = 0
    while i < length and value >= bins[i]:
      i += 1
    intervals[i] += 1
  intervals = intervals / float(len(data))
  plt.xlim(min(bins) - margin, max(bins) + margin)
  bins.insert(0, -999)
  plt.title("probability-distribution")
  plt.xlabel('Interval')
  plt.ylabel('Probability')
  plt.bar(bins, intervals, color=['r'], label=label)
  plt.legend()
  plt.show()

具体代码示例如下。

完整调用示例


if __name__ == '__main__':
  data = [1,4,6,7,8,9,11,11,12,12,13,13,16,17,18,22,25]
  probability_distribution(data=data, bins_interval=5,margin=0)

运行后的效果如图所示。

以上即为Python绘制频率分布直方图的完整示例内容,旨在提供参考并支持相关技术探讨。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。