导读:直方图和柱状图都是数据分析中非常常见、常用的图表,由于两者外观上看起来非常相似,也就难免造成一些混淆。此前我们曾在《柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?》一文中带大家了解了柱状图,今天我们再来讲讲直方图。

作者:屈希峰,资深Python工程师,知乎多个专栏作者

来源:华章科技

01 概述

直方图(Histogram),形状类似柱状图却有着与柱状图完全不同的含义。直方图牵涉统计学概念,

首先要对数据进行分组,然后统计每个分组内数据元的数量。

在平面直角坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,这样的统计图称为频数分布直方图。

频数分布直方图需要经过频数乘以组距的计算过程才能得出每个分组的数量,同一个直方图的组距是一个固定不变的值,所以如果直接用纵轴表示数量,每个矩形的高代表对应的数据元数量,既能保持分布状态不变,又能直观地看出每个分组的数量,如图2-58所示。

▲图2-58 直方图

通过直方图还可以观察和估计哪些数据比较集中,异常或者孤立的数据分布在何处。

首先,了解如下几个基本概念。

组数:

在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数。

组距:

每一组两个端点的差。

频数:

分组内数据元的数量除以组距。

02 实例

直方图代码示例如下所示。

代码示例 2-45

1plot = figure(plot_width=300, plot_height=300)

2plot.quad(top=[2, 3, 4], bottom=[1, 2, 3], left=[1, 2, 3],

3          right=[1.2, 2.5, 3.7], color="#B3DE69")

4show(plot)

运行结果如图2-59所示。

▲图2-59 代码示例2-45运行结果

代码示例2-45第2行使用quad ()方法通过定义矩形的四边边界绘制直方图,具体参数说明如下。

p .quad(left, right, top, bottom, **kwargs)参数说明。

left

(:class:`~bokeh.core.properties.NumberSpec` ) : 直方x轴左侧边界

right

(:class:`~bokeh.core.properties.NumberSpec` ) : 直方x轴右侧边界

top

(:class:`~bokeh.core.properties.NumberSpec` ) : 直方y轴顶部边界

bottom

(:class:`~bokeh.core.properties.NumberSpec` ) : 直方y轴底部边界

其他参数(**kwargs)说明。

alpha

(float) : 一次性设置所有线条的透明度

color

(Color) : 一次性设置所有线条的颜色

source

(ColumnDataSource) : Bokeh特有数据格式(类似于Pandas Dataframe)

legend

(str) : 图元的图例

x_range_name

(str) : x轴范围名称

y_range_name

(str) : y轴范围名称

level

(Enum) : 图元渲染级别

代码示例 2-46

1import numpy as np

2import scipy.special

3from bokeh.layouts import gridplot

4# 绘图函数

5def make_plot(title, hist, edges, x, pdf, cdf):

6    p = figure(title=title, tools='', background_fill_color="#fafafa")

7    p.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],

8           fill_color="navy", line_color="white", alpha=0.5)

9    p.line(x, pdf, line_color="#ff8888", line_width=4, alpha=0.7, legend="PDF")

10    p.line(x, cdf, line_color="orange", line_width=2, alpha=0.7, legend="CDF")

11

12    p.y_range.start = 0

13    p.legend.location = "center_right"

14    p.legend.background_fill_color = "#fefefe"

15    p.xaxis.axis_label = 'x'

16    p.yaxis.axis_label = 'Pr(x)'

17    p.grid.grid_line_color="white"

18    return p

19# 正态分布

20mu, sigma = 0, 0.5

21measured = np.random.normal(mu, sigma, 1000)

22hist, edges = np.histogram(measured, density=True, bins=50)

23x = np.linspace(-2, 2, 1000)

24# 拟合曲线

25pdf = 1/(sigma * np.sqrt(2*np.pi)) * np.exp(-(x-mu)**2 / (2*sigma**2))

26cdf = (1+scipy.special.erf((x-mu)/np.sqrt(2*sigma**2)))/2

27p1 = make_plot("Normal Distribution (μ=0, σ=0.5)", hist, edges, x, pdf, cdf)

28# 对数正态分布

29mu, sigma = 0, 0.5

30measured = np.random.lognormal(mu, sigma, 1000)

31hist, edges = np.histogram(measured, density=True, bins=50)

32x = np.linspace(0.0001, 8.0, 1000)

33pdf = 1/(x* sigma * np.sqrt(2*np.pi)) * np.exp(-(np.log(x)-mu)**2 / (2*sigma**2))

34cdf = (1+scipy.special.erf((np.log(x)-mu)/(np.sqrt(2)*sigma)))/2

35p2 = make_plot("Log Normal Distribution (μ=0, σ=0.5)", hist, edges, x, pdf, cdf)

36# 伽玛分布

37k, theta = 7.5, 1.0

38measured = np.random.gamma(k, theta, 1000)

39hist, edges = np.histogram(measured, density=True, bins=50)

40x = np.linspace(0.0001, 20.0, 1000)

41pdf = x**(k-1) * np.exp(-x/theta) / (theta**k * scipy.special.gamma(k))

42cdf = scipy.special.gammainc(k, x/theta)

43p3 = make_plot("Gamma Distribution (k=7.5, θ=1)", hist, edges, x, pdf, cdf)

44# 韦伯分布

45lam, k = 1, 1.25

46measured = lam*(-np.log(np.random.uniform(0, 1, 1000)))**(1/k)

47hist, edges = np.histogram(measured, density=True, bins=50)

48x = np.linspace(0.0001, 8, 1000)

49pdf = (k/lam)*(x/lam)**(k-1) * np.exp(-(x/lam)**k)

50cdf = 1 - np.exp(-(x/lam)**k)

51p4 = make_plot("Weibull Distribution (λ=1, k=1.25)", hist, edges, x, pdf, cdf)

52# 显示

53show(gridplot([p1,p2,p3,p4], ncols=2, plot_width=400, plot_height=400, toolbar_location=None))

运行结果如图2-60所示。

▲图2-60 代码示例2-46运行结果

代码示例2-46第5行自定义绘图函数make_plot (title, hist, edges, x, pdf, cdf),其中参数分别为图的标题、直方顶部边界、左右边界、拟合曲线的x坐标、方法通过定义矩形的四边边界,PDF为概率密度函数,CDF为累积分布函数。第53行通过gridplot()方法一次展示4张图(正态分布、对数正态分布、伽玛分布、韦伯分布)。

关于作者:屈希峰,资深Python工程师,Bokeh领域的实践者和布道者,对Bokeh有深入的研究。擅长Flask、MongoDB、Sklearn等技术,实践经验丰富。知乎多个专栏(Python中文社区、Python程序员、大数据分析挖掘)作者,专栏累计关注用户十余万人。

本文摘编自《Python数据可视化:基于Bokeh的可视化绘图》,经出版方授权发布。

延伸阅读《Python数据可视化》

推荐语:

从图形绘制、数据动态展示、Web交互等维度全面讲解Bokeh功能和使用,不含复杂数据处理和算法,深入浅出,适合零基础入门,包含大量案例。

简述直方图和柱形图的区别_什么是直方图?跟柱状图有什么区别?终于有人讲明白了...相关推荐

  1. 互联网搜索的哪些环节 机器学习_什么是机器学习?有哪些分类?到底有什么用?终于有人讲明白了...

    导读:在业界,近些年来机器学习在人机对弈.语音识别.图像识别等场景下取得了蓬勃发展,引发了人们对人工智能改造未来社会的无限热情和期待.但在学界,却有不少科学家指出了机器学习的发展局限.加拿大滑铁卢大学 ...

  2. 什么是GPU?跟CPU有什么区别?终于有人讲明白了

    导读:一文看懂GPU的前世今生. 作者:钱纲 来源:大数据DT(ID:hzdashuju) 2016年,发生了一件震动IT界的大事.谷歌的人工智能软件阿尔法狗(AlphaGo)击败了韩国的世界围棋冠军 ...

  3. 两种主流大数据系统架构的区别,终于有人讲明白了

    导读:从资源管理角度来看,当前的大数据系统架构主要有两种:一种是MPP数据库架构 ,另一种是Hadoop体系的分层架构.这两种架构各有优势和相应的适用场景.本文主要讲这两种架构的区别. 同样都可以处理 ...

  4. 箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...

    导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础.没有可信的数据,数据挖掘构建的模型将是空中楼阁. 数据质量分析的主要任务是检查原始数 ...

  5. 信息化、数字化与数字化转型的区别,终于有人讲明白了

    作者:唐湘民 来源:大数据DT(ID:hzdashuju) 在信息化时代,人们的活动是在物理世界进行的,借助信息技术提高效率.信息化是为物理世界活动服务的,例如出租车管理系统是为出租车运营服务的. 在 ...

  6. 简述直方图和柱形图的区别_如何区分直方图与柱形图

    你还在错误的定义数据指标的展现形式吗?下面讲一下直方图和柱形图的区别. 直方图------------------------------------------------------------- ...

  7. 机器人编程与python语言的区别_儿童编程和机器人编程有啥区别?

    这是最全面的回答!一篇文章让你彻底了解少儿编程和机器人编程的区别! 虽然都带有"编程"二字,但少儿编程和机器人编程还是有本质区别的,有哪些不一样呢? 偷懒的家长可以直接看下面这张表 ...

  8. 用法与区别_指示代词this, that, these, those的区别和用法

    今天学习指示代词this, that, these和those的用法. 先来看包括this和that的2个句子. 图片来源于网络 我们看图片中手和物品的距离. 在左边的图片中, 苹果就在手边,这个人指 ...

  9. 设置为true有什么区别_腻子粉和腻子膏到底有什么区别,腻子粉厂家来为你讲解...

    装修中腻子是常见的一种涂料吗,在涂刷底漆之前一定要使用腻子膏或腻子粉,这样才能使后续涂装效果更好.不少业主有疑问,装修用腻子膏好,还是用腻子粉好?二者区别在哪呢?下面,就由腻子粉厂家来为你分析 一. ...

最新文章

  1. 浅谈分布式系统一致性之3PC协议
  2. 装AJAX.NET 1.0的环境,我遇到个问题,进来解答下
  3. 每天一道LeetCode-----后缀表达式求值
  4. 常用HLS优化指令总结
  5. python基础语法whike循环_python基础语法 - 循环
  6. .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
  7. layui复选框组件:如何操控隐藏域实现checked状态切换(含代码、案例、截图)
  8. MySQL索引、事物
  9. SQLi LABS Less 15 布尔盲注
  10. windows iphone 传输
  11. Android Studio生成函数注释
  12. 鸿鹄论坛oracle资料,鸿鹄论坛_HCNA-Storage (H13-611)题库 v4.0.pdf
  13. 计算机编程c语言汇总,计算机软件编程中的C语言分析
  14. 微型计算机常常采用三种线结构,2016年河海大学929地理信息系统之地理信息系统概论考研复试题库...
  15. Win10+外接显示器 “未检测到其他显示器”
  16. java练手小项目雷霆战机
  17. 基于Java Web的航空售票管理系统(酒店管理系统,图书管理系统、学生管理系统)
  18. 块数据3.0:秩序互联网与主权区块链
  19. 如何做一名优秀的下属
  20. 12.Oracle Redo重做日志管理

热门文章

  1. sklearn 学习之 model_selection
  2. tensorRT教程——tensor RT OP理解(实现自定义层,搭建网络)
  3. 怎么将视频进行压缩?视频压缩简单的步骤是什么?
  4. 堪称神级的Java技术栈手册火了!
  5. 实现手机来电铃声,通知铃声、警告铃声等音频定制化功能(一,添加扫描分区myimage)
  6. 读《嫌疑人X的献身》
  7. 空间统计--空间关系建模工具集,Modeling Spatial Relationships
  8. 阿里巴巴李云的一封信
  9. 上传图片到php服务器
  10. vim代码格式化插件clang-format