Python绘制频率分布直方图的示例

yipeiwu_com6年前Python基础

项目中在前期经常要看下数据的分布情况,这对于探究数据规律非常有用。概率分布表示样本数据的模样,长的好不好看如果有图像展示出来就非常完美了,使用Python绘制频率分布直方图非常简洁,因为用的频次非常高,这里记录下来。还是Python大法好,代码简洁不拖沓~

如果数据取值的范围跨度不大,可以使用等宽区间来展示直方图,这也是最常见的一种;如果数据取值范围比较野,也可以自定义区间端点,绘制图像,下面分两种情况展示

1. 区间长度相同绘制直方图

#-*- 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()

2. 区间长度不同绘制直方图

#-*- 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()

Case示例

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设计】。

相关文章

Django的HttpRequest和HttpResponse对象详解

本文研究的主要是Django的HttpRequest和HttpResponse对象的相关内容,具体如下。 请求一张页面时,Django把请求的metadata数据包装成一个HttpReq...

python实现支持目录FTP上传下载文件的方法

本文实例讲述了python实现支持目录FTP上传下载文件的方法。分享给大家供大家参考。具体如下: 该程序支持ftp上传下载文件和目录、适用于windows和linux平台。 #!/u...

深入解读Python解析XML的几种方式

深入解读Python解析XML的几种方式

在XML解析方面,Python贯彻了自己“开箱即用”(batteries included)的原则。在自带的标准库中,Python提供了大量可以用于处理XML语言的包和工具,数量之多,甚...

Python简单实现安全开关文件的两种方式

本文实例讲述了Python简单实现安全开关文件的两种方式。分享给大家供大家参考,具体如下: 以下代码经Python3.3测试。 方式1: try: file = open('co...

使用python socket分发大文件的实现方法

思路: 使用socket传输文件过程中,如果单次传输每次只能发送一部分数据,如果针对大文件,一次传输肯定是不行的,所以需要我们在传输的时候提前把传输内容的大小先发送给客户端,在客户端循环...