首先按照惯例先来认识下直方图是谁,以下是从维基百科搬运过来的直方图的定义:

在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量,以长条图(bar)的形式具体表现。因为直方图的长度及宽度很适合用来表现数量上的变化,所以较容易解读差异小的数值。

直方图也是用条形进行标注的,而条形图和直方图犹如孪生兄弟般让很多人都傻傻分不清,那么我们就先来好好区分一下这两种图形吧:

  • 条形图是用条形的长度表示各类别频数的多少,而宽度(表示类别)是固定的,没有实际的数值意义。
  • 直方图是用面积表示各组频数的多少,条形的长度表示每一组的频数或频率,条形的宽度表示各组的组距,所以直方图中条形的长度和宽度都是有实际的数值意义的。
  • 条形图描述分类变量,直方图描述数值变量。
  • 由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列的。

单纯文字不够直观的话,我们来个图感受下:

绘制直方图

区分好了条形图和直方图,就可以安心的探索直方图了。

假设我们有一组数据,是一个学校200位同学的身高数据,如果想要知道该校学生身高的分布,那么直方图再合适不过了。

这里我用随机数生成了200个值在150到180之间的数表示身高信息:

data = np.random.randint(150,180,200)
data

输出的结果:

​
array([162, 166, 158, 166, 165, 170, 157, 156, 164, 161, 154, 176, 166,176, 153, 169, 164, 153, 171, 175, 171, 173, 155, 165, 168, 160,162, 150, 151, 169, 166, 152, 174, 176, 160, 155, 158, 152, 159,179, 179, 168, 178, 166, 174, 171, 167, 166, 165, 163, 164, 153,153, 153, 162, 167, 169, 155, 155, 175, 161, 151, 173, 154, 151,151, 166, 168, 167, 173, 166, 164, 175, 172, 163, 175, 154, 169,160, 174, 163, 167, 156, 154, 157, 169, 160, 176, 150, 154, 158,167, 164, 153, 152, 165, 165, 160, 167, 161, 164, 177, 177, 159,161, 171, 169, 150, 165, 156, 156, 155, 165, 164, 179, 164, 179,155, 172, 151, 178, 171, 164, 165, 161, 166, 170, 175, 163, 163,179, 175, 173, 150, 171, 150, 178, 175, 152, 176, 168, 150, 172,166, 176, 170, 174, 174, 152, 158, 171, 165, 167, 152, 163, 167,164, 151, 174, 169, 169, 166, 167, 168, 179, 160, 179, 156, 168,168, 172, 175, 160, 165, 160, 161, 164, 179, 158, 176, 175, 154,167, 159, 153, 169, 151, 158, 163, 169, 155, 165, 178, 151, 168,164, 169, 177, 150, 169])

以上就是200位同学的身高信息了,存储在一个数组中。

如果是常见的查看分布,直方图很容易绘制,这里我们通过这组数据探索下直方图函数中各个参数的作用,以更游刃有余的绘制符合需求的直方图。

bins参数

bins参数指的是要将数据分成几组,它接收的参数可以是整数,也可以是序列,还可以是字符串,常用的是整数和序列。

  • 如果是整数n,则表示要将所有数据平均分成n组进行绘图
  • 如果是序列,则是指定每一组的临界值

通过代码来看一下区别:

fig = plt.figure(figsize=(16,4))
​
pic1 = fig.add_subplot(131)
plt.hist(data)
plt.title("bins默认10")
​
pic2 = fig.add_subplot(132)
plt.hist(data,bins = 15)
plt.title("bins = 15")
​
pic3 = fig.add_subplot(133)
plt.hist(data,bins = [150,153,156,159,162,165,168,171,174,179])
plt.title("bins取值为序列");

fig = plt.figure(figsize=(9,4))

pic1 = fig.add_subplot(121)

plt.hist(data,bins = 10)

plt.title('range默认None')

pic2 = fig.add_subplot(122)

plt.hist(data,bins = 10,range=(155,175)) #设置范围从155-175

plt.title('range=(155,175)');

能够看到x轴的数值范围发生了变化,整个直方图的形状也发生了变化。

density参数

这个参数的意思其实很直观,参数名字直译成中文就是密度的意思。普通的直方图y轴表示的都是频数,而通过density参数可以将y轴转化成密度刻度,这个参数接收布尔值,默认为None。

fig = plt.figure(figsize=(9,4))
​
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) #y轴表示计数
plt.title('density默认None')
​
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10, density=True)
# density=True 将原本y轴的计数转换成概率密度的计数,直方图下面积为1
plt.title('density=True');

虽然两个图的形状是完全一模一样的,但是细看就能发现y轴的数值不一样,具体的参数作用已经以备注的形式标注到代码中了哦。

这里涉及到了另一个参数normed,这个参数已经被弃用了,它的作用和density一样,只用density就可以了,

weights参数

大家对这个参数应该不陌生,它经常出现,表示权重。没错在这里也是表示设置权重。它接收的是一个序列,序列中是数值,数值的数量和原数据集中元素的个数一致,也就是每个数值都有自己单独的权重,我用随机数生成了200个数值作为权重传给参数,看一下和不设置权重时有哪些变化。

x0=np.random.rand(200)#生成总和为1的200个数,设置随机权重
ratio=1/sum(x0)
x1=x0*ratio
​
fig = plt.figure(figsize=(9,4))
​
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10)
plt.title('weights默认None')
​
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,weights=x1)
plt.title('设置weights');

当所有元素的权重都一样时是第一幅图的情况,而进行权重设置后,分布情况发生了变化,而且y轴也发生了变化,不再是单纯的计数。在实际工作中要谨慎使用权重,以符合业务需求为主哈。

cumulative参数

如果英文比较好的人们,一眼就能看出这个参数的作用,直译成中文就是累积的意思。到这里又出现了一个小问题,很多人对“累积”和“累计”又傻傻分不清了,其实这两者还是很容易区分的,看下图特别直观:

是不是能直观区分“累积”和“累计”了?

那就继续探索cumulative参数吧,这个参数接收布尔值,默认为False,通过代码来看一下参数设置不同都有怎样的结果。

fig = plt.figure(figsize=(9,4))
​
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10)
plt.title('cumulative默认False')
​
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,cumulative=True) #累积直方图,展示累积分布
plt.title('cumulative=True');

左边时普通的直方图,右边时累积直方图,同样可以根据实际的业务需求来进行参数设置哦。

由于篇幅有限,对直方图函数的介绍就先到这里啦。细心的小伙伴可能发现了介绍参数的顺序就是按照函数官方文档中参数的顺序来的,没错,就是按照这个顺序进行的。但是参数中的第一个参数x却没有进行介绍,是这个参数没什么可介绍的嘛?当然不是,这个参数也是有些小细节需要注意的,具体的讲解留到下一篇文章和其他参数一起介绍啦。

matplotlib直方图_你真的了解matplotlib吗?---直方图(上)相关推荐

  1. python 灰度直方图_数字图像处理灰度变换之灰度直方图及python实现

    图像灰度直方图 灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率.直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来.横坐标是灰度级,纵坐标是该灰度级出现的频率.图 ...

  2. 嵌套饼图_你真的了解matplotlib吗?---环形图

    环形图简介 环形图是饼图衍生出来的统计图形,可以看作是两个以上饼图的叠合.环形图与饼图类似,其实是有差别的.饼图是用圆形及圆内扇形的面积来表示数值大小的图形,主要用于表示总体中各组成部分所占的比例.与 ...

  3. java 灰度直方图_【数字图像处理】灰度直方图、直方图均衡化、直方图规定化...

    灰度直方图 一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征.图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少. 图像的灰度直方图是灰 ...

  4. 新代系统cnc怎样连接电脑_你真的了解3C产线上的运控系统吗?

    3C电子.汽车零部件及配件.汽车整车等制造行业是目前工业机器人的主要应用领域,据GGII统计,未来3C行业仍是带动工业机器人增长的主要因素.各大巨头公司纷纷抢占市场先机. 目前四大家族依然占据主导地位 ...

  5. matplotlib 直方图_掌握了Matplotlib这两个方法,轻松绘制出漂亮的直方图!

    一个直方图可以很好的把数据展示出来,Matplotlib库中plt.hist()函数用来展示直方图.这个函数的使用非常的简单,一行代码就可以创建一个直方图. 简单的直方图 import numpy a ...

  6. matplotlib xticks 基于 旋转_数据可视化之 matplotlib 绘图篇

    本文转载于 SegmentFault 社区 作者:mhxin 引言 首先来看几个简单的图表, 下面 4 段不同的 matplotlib 绘图代码最终的结果是一样的,绘制的图形如下图所示. a = np ...

  7. matplotlib可视化_使用Matplotlib改善可视化设计的5个魔术技巧

    matplotlib可视化 It is impossible to know everything, no matter how much our experience has increased o ...

  8. python导入matplotlib模块_从NumPy导入python子模块有什么区别,matplotlib包

    参见英文答案 > Importing packages in Python                                    5个 当我尝试使用matplotlib的pypl ...

  9. python+matplotlib对柿子图的彩色和灰色直方图统计

    python+matplotlib对柿子图的彩色和灰色直方图统计 前言 代码 有疑待查 参考链接 前言 最近在对柿子图统计时,遇到了np.histogram函数的参数bins的用法不理解,查找了大量资 ...

最新文章

  1. Linux下正确使用getifaddrs()函数避免内存泄露
  2. 在Ubuntu 12.04 64bit上搭建Crtmpserver视频直播服务
  3. python编程实例下载-python网络编程之文件下载实例分析
  4. 90. Leetcode 剑指 Offer 62. 圆圈中最后剩下的数字 (动态规划-基础题)
  5. MKL学习——基本操作C++实现
  6. 判断溢出(ybtoj-字符串)
  7. 2019 年,智能问答(Question Answering)的主要研究方向有哪些?
  8. 百度SEO资源吧emlog模版全套源码
  9. EditPlus 使用技巧集萃(转)
  10. Ubuntu16.04 下SU画图,批量和单个
  11. 2014/11/4~2014/12/20阶段性目标
  12. clock()函数的使用
  13. 在鼠标点击的位置 ,添加一个div ,类似手表右键菜单
  14. 计算机网络原理之网络层(解疑答惑)
  15. 矩阵的转置例题MATLAB,MATLAB特殊矩阵以及矩阵转置
  16. linux怎么用jconsole_怎么在linux jconsole
  17. 洛谷1260 工程规划
  18. Flux、Mono、Reactor 实战(史上最全)
  19. 保定计算机软件学院是哪个区,河北软件职业技术学院在哪个区
  20. Power BI 数据导入(SQL Server、MySQL、网页数据)

热门文章

  1. mysql中concat函数的使用相关总结
  2. pythond的执行原理_python基础——继承实现的原理
  3. 在Mac下安装JMeter
  4. php网站后台管理反应慢,phpcmsv9 后台操作反应慢的原因
  5. java 类 赋值_Java实现不同的类的属性之间相互赋值
  6. c语言用一维数组求字符串,c语言一维数组练习题.doc
  7. java 微信多媒体文件_java微信接口之三—上传多媒体文件
  8. 北京理工大学计算机学院张教授,北京理工大学嵩天教授做客信息学院
  9. 玉林财经学校计算机及应用课程,广西玉林财经学校
  10. navicatformysql