python绘制简单直方图(质量分布图)的方法

这篇文章总的讲述了一下绘制频数直方图和频率直方图的绘制方法,通过图像进行比较,发现各个直方图的优缺点,以便在工程中进行运用

Posted in Python onApril 21, 2022

直方图,又称质量分布图,是一种统计报告图,由一系列高度不等的纵条或线段表示数据分布情况。用横轴表示数据类型,纵轴表示分布情况。直方图是数值数据分布的精确图形表示。绘制连续性的数据,展示一组或多组数据的分布状况。

直方图的绘制和条形图有些相似,需要把plt.bar()修改成plt.hist(),更改图形的拟合方式,即可绘制直方图。例如你获取到了250部电影的数量,他们的时长都在80-140分钟,如何呈现电影的时长分布情况呢?

老规矩,上代码:

'''
    组数=极差/组距
'''
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
 
a = [random.randint(80,140) for i in range(250)]
print(a)
print(max(a)-min(a))
 
# 计算组数
d = 3  # 组距
num_bins = (max(a)-min(a))//d
 
# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)
plt.hist(a, num_bins)
 
# 设置x轴刻度
plt.xticks(range(min(a), max(a)+d, d))
 
# 设置网格
plt.grid(alpha=0.4)
plt.show()

运行结果如下图:

python绘制简单直方图(质量分布图)的方法

程序分析:通过随机数random.randint()生成250个80-140的随机整数,代表250部电影的时长。然后要把时间段分成组,设置组距d为3,那么(max-min)//d即为分成的组数,然后通过plt.hist()对组数和数据进行拟合。设置x刻度时,因为range含头不含尾,所以最后截止的位置要加一个组距d,才能显示完全。可以看出,这个数字直方图可以显示每个电影时长在每个时段占得数目。那么问题又来了,如果想要知道在每个时段占总时段的比例呢,也就是频率分布直方图?

so easy! 只需要在plt.hist()里面设置参数density=True实现数量的频率化,其余不变。

代码如下:

'''
    组数=极差/组距
'''
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
 
a = [random.randint(80,140) for i in range(250)]
print(a)
print(max(a)-min(a))
 
# 计算组数
d = 3  # 组数
num_bins = (max(a)-min(a))//d
 
# 设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(a,num_bins,density=True)  # 使用density实现频率化
 
# 设置x轴刻度
plt.xticks(range(min(a),max(a)+d,d))
 
# 设置网格
plt.grid(alpha=0.4)
plt.show()

运行结果:

python绘制简单直方图(质量分布图)的方法

显而易见,每个时段的数目变成了总体的占比,也就是频率,很好的达到了想要的效果。

那如果要自己设置数据自己设置x轴的距离,对x轴的刻度不均匀划分呢?

上代码:

# coding=utf-8
from matplotlib import pyplot as plt
from matplotlib import font_manager
 
interval = [0,5,10,15,20,25,30,35,40,45,60,90,150]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
 
plt.figure(figsize=(20,8),dpi=80)
 
plt.bar(range(len(quantity)),quantity,width=1)
 
# 设置x轴刻度
_x = [i-0.5 for i in range(13)]
 
plt.xticks(_x, interval)
 
plt.grid(alpha=0.8)
plt.show()

运行结果如下图:

python绘制简单直方图(质量分布图)的方法

可以看出来,很简单,只需要把x轴对应的数据设置好,把对应x轴的刻度设置好,进行数据匹配即可。一定要注意,分配的组数和数据个数匹配问题。

总结:这篇文章总的讲述了一下绘制频数直方图和频率直方图的绘制方法,通过图像进行比较,发现各个直方图的优缺点,以便在工程中进行运用。

Python 相关文章推荐
python 快速排序代码
Nov 23 Python
python定时器使用示例分享
Feb 16 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
通过python爬虫赚钱的方法
Jan 29 Python
python DataFrame 取差集实例
Jan 30 Python
Python实现图片转字符画的代码实例
Feb 22 Python
python中while和for的区别总结
Jun 28 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
Python实现数字的格式化输出
Aug 01 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
Python绘制散乱的点构成的图的方法
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 #Python
使用python绘制横竖条形图
python多次执行绘制条形图
Apr 20 #Python
Python 数据可视化工具 Pyecharts 安装及应用
python画条形图的具体代码
You might like
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
Python使用django获取用户IP地址的方法
2015/05/11 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
浅谈五大Python Web框架
2017/03/20 Python
python进行两个表格对比的方法
2018/06/27 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
python如何操作mysql
2020/08/17 Python
python遍历路径破解表单的示例
2020/11/21 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
目标责任书范本
2014/04/16 职场文书
大学新学期计划书
2014/04/28 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
python基础之//、/与%的区别详解
2022/06/10 Python