在matplotlib中,ax.plot函数是用来画曲线的,而ax.hist函数则用来画直方图(histogram)。

下面我们用python代码换一个直方图,10000个符合正态分布的随机数,将他们按照直方图画出来:

import numpy as np

import matplotlib.pyplot as plt

x = np.random.randn(10000)

fig = plt.figure()

ax = fig.add_subplot()

ax.hist(x, bins=50, color='blue', alpha=0.7)

plt.show()

注意ax.hist函数,数据的输入只有x,x可以是一个sequence,也可以是matrix;

bins控制直方图中等宽分组的数量,默认为10,不过应该很少用默认值吧;

alpha控制直方图颜色的透明度。(plot等其它函数中,也有这个参数)

正态分布直方图

这个直方图怎么看,y轴表示数据出现的频率或次数,x轴是按bins参数输入进行分组。直方图,可以理解为由一系列高度不等的纵向条柱来表示数据分布特征的统计报告图,它是对原始数据进行压缩的结果。

直方图分组的区间

我没有找到特别权威的说明,不过,通过阅读matplotlib官方教材能够发现,bins的值如果是一个整数,x轴的区间就进行等宽划分;bins只也可以是一个sequence对象,用来进行不等宽划分x轴。

不管怎么分x轴的区间,每一个分组,都是左封闭右开放,只有最后一个分组,是左右都封闭的!(想一想这样是合理的,左边不封闭,最左边的那个分组就没法处理了)

>>> plt.hist((1,2,3,4,5,6,7,8,2), bins=(1,2,3,4,5,6,8))

(array([1., 2., 1., 1., 1., 3.]), array([1, 2, 3, 4, 5, 6, 8]),

ject of 6 artists>)

对(1,2,3,4,5,6,7,8,2)话直方图,但是bins=(1,2,3,4,5,6,8),即6-8为一个大分组,有3个数字落在这个区间,数据中出现了两次2,第1个分组是[1,2),不包含2,2因此包含在第2个分组中[2,3)。这样画出来的直方图如下:

bins实现非等宽划分组

上面这个图其实看着不是很好看,全都粘在一起了,我们可以通过rwidth参数(float,分组区间大小的百分比)来控制各个bar之间的间隔,注意此时图像上的位置,已经不再是真实的分组区间,x轴的刻度也可以用xticks函数来精确控制:

>>> plt.hist((1,2,3,4,5,6,7,8,2), bins=(1,2,3,4,5,6,8), rwidth=0.9, color='purpl

e', alpha=0.5)

(array([1., 2., 1., 1., 1., 3.]), array([1, 2, 3, 4, 5, 6, 8]),

ject of 6 artists>)

>>> plt.xticks(range(1,10,1))

效果如下:

美化后的直方图

当bins参数为一个sequence时,实际上就是给dataset指定了一个range,即bins所括起来的区间不需要与dataset的区间一致。当bins是一个int时,我们可以用range参数来指定有效区间,将不在区间范围内的outliers排除在直方图的统计中。

输入数据为matrix时的直方图

输入数据x如果是一个matrix,matplotlib会把它的每一个列向量当做一个dataset来画直方图,然后将多个直方图并排在一起放在一个图中。此时,分组在x轴上的分割就不是精确的了(就像使用了rwidth参数):

>>> plt.hist(((1,2,3,4,5,1,2,3,4,5,1,1,2,2,3,4,5,5),(1,2,3,4,5),(1,2,3,3,3)), bi

ns=4)

(array([[4., 4., 3., 7.],

[1., 1., 1., 2.],

[1., 1., 3., 0.]]), array([1., 2., 3., 4., 5.]),

r objects>)

从返回值可以看出,分组为array([1., 2., 3., 4., 5.]),但为了作图,多个柱形公用一个区间,他们只能在这个区间内进行某种排列,两边还要留点空余出来:

多个dataset时的直方图

根据需要,我们可以此时将多个直方图的bar堆叠起来(stack),使用stacked=True参数,配合rwidth,代码和效果如下:

>>> plt.hist(((1,2,3,4,5,1,2,3,4,5,1,1,2,2,3,4,5,5),(1,2,3,4,5),(1,2,3,3,3)), bi

ns=4, stacked=True, rwidth=0.9)

(array([[4., 4., 3., 7.],

[5., 5., 4., 9.],

[6., 6., 7., 9.]]), array([1., 2., 3., 4., 5.]),

python绘制随机数直方图-用matplotlib画直方图(histogram)相关推荐

  1. python绘制时间序列图_python matplotlib 画dataframe的时间序列图实例

    python matplotlib 画dataframe的时间序列图实例 在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字 ...

  2. python怎么做直方图_python如何画直方图

    matplotlib.pyplot直方图画起来还是非常方便的,思路还是准备好数据,然后设置参数即可. 直方图(Histogram)又称质量分布图.是一种统计报告图,由一系列高度不等的纵向条纹或线段表示 ...

  3. python绘制随机数直方图-python plotly绘制直方图实例详解

    计算数值出现的次数 import cufflinks as cf cf.go_offline() import numpy as np import pandas as pd set_slippage ...

  4. 如何用matplotlib画直方图_如何用修容棒画卧蚕 修容棒画卧蚕教程

    修容棒是用来修饰五官和脸型的,修容棒可以让面部轮廓变得更加小巧精致,深邃的五官一定要用修容,用修容棒画卧蚕也是可以的,注意使用方法就好. 如何用修容棒画卧蚕 化好眼妆之后选择一把斜头眉刷蘸取少量的修容 ...

  5. python绘制对数函数_python中如何画对数函数图?

    小伙伴们还记不记得,在高考数学题后面的大题总会出现对数函数,需要我们画成对数函数图才能解答.之前小编向大家介绍对数log函数的表示方法(https://www.py.cn/jishu/jichu/21 ...

  6. python绘制饼图explode_python通过matplotlib生成复合饼图

    可以通过matplotlib实现 from matplotlib.patches import ConnectionPatch #制画布fig = plt.figure(figsize=(9,5.06 ...

  7. python绘制坐标系_python库matplotlib绘制坐标图

    很多时候我们数据处理的时候要画坐标图,下面我用第三方库matplotlib以及scipy绘制光滑的曲线图 需要安装的库有 matplotlib,scipy, numpy import matplotl ...

  8. python绘制条形图-python3使用matplotlib绘制条形图

    本文实例为大家分享了python3使用matplotlib绘制条形图的具体代码,供大家参考,具体内容如下 绘制竖状条形图 代码 from matplotlib import pyplot as plt ...

  9. python一条竖线_python matplotlib 画一条水平直线遇到的问题

    想要的图像如下: 一开始是这样画的: import numpy as np #使用import导入模块numpy,并简写成np import matplotlib.pyplot as plt #使用i ...

最新文章

  1. 均线金叉 不破支撑BCH有望延续反弹
  2. java什么是局部变量,什么是java的局部变量,成员变量,全局变量?
  3. python语法总结下载_python语法总结1
  4. php pdo 数组,php – 使用PDO更新数组
  5. mysql源码安装配置_MySQL源码安装及配置
  6. java线程的创建与执行_Java多线程的创建和运行
  7. 大数据集群搭建之节点的网络配置过程(二)
  8. 编写vbs脚本发送邮件
  9. 计算机编程的 20 年变迁!
  10. Log4net使用指南[转]
  11. bzoj 2707: [SDOI2012]走迷宫(Trajan+高斯消元+Dp)
  12. python游戏设计需求分析_「Python小游戏」Bomb Catching--代码分析
  13. 网络技术——路由器及其配置
  14. 当电竞选手成为一种职业,游戏手机是否也会炙手可热?
  15. storm源码分析研究(十三)
  16. Java并发编程简介
  17. 《微信公众平台与小程序开发——从零搭建整套系统》第1章 微信生态
  18. 7.25~7.26 周末翻倍奖励——滴滴快车单
  19. Excel学习笔记(7.16)——offset函数、and()、or()、counta函数使用
  20. 暑期实习部分大厂面试记录

热门文章

  1. 异常检测——无监督、高斯分布模型,需要带标记的样本数据,基本假设:特征符合高斯分布...
  2. 三个大数据处理框架:Storm,Spark和Samza 介绍比较
  3. javascript primise本质——为了简化异步编码而针对异步操作的代理
  4. TFF 官方demo解释
  5. 变量在原型链中的查找顺序
  6. 网站用域名能访问,用域名IP不能访问的原因分析
  7. C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)...
  8. Eclipse Android编程快捷键
  9. 用Javascript隐藏超级链接的真实地址
  10. 总结ThinkPHP使用技巧经验分享(四)