第三章 使用 matplotlib 绘制直方图

系列文章目录

第一章 使用 matplotlib 绘制折线图
第二章 使用 matplotlib 绘制条形图
第三章 使用 matplotlib 绘制直方图
第四章 使用 matplotlib 绘制散点图
第五章 使用 matplotlib 绘制饼图
第六章 使用 matplotlib 绘制热力图
第七章 使用 matplotlib 绘制堆叠条形图
第八章 使用 matplotlib 在一个画布内绘制多个图

文章目录

前言

上一章我们讲述了条形图的绘制,本节课我们来讲述直方图的绘制。

一、什么是直方图?

直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。直方图和条形图的外观相似。区别主要有以下几点:

  • 条形图用条形的长度(横置时)或高度(纵置时)表示各类别频数的多少,其宽度(表示类别)则是固定的;直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
  • 由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
  • 条形图主要用于展示分类数据的大小,而直方图则主要用于展示数值型数据的分布。

二、直方图的绘制

下面我们就通过例子来看下直方图的绘制,示例代码如下:

import numpy as np
from matplotlib import pyplot as plt

plt.style.use('fivethirtyeight')

ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55]

plt.hist(ages, bins=5)

plt.title('人员的年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')

plt.tight_layout()

plt.show()

上面的代码中,通过调用 hist 函数来绘制直方图,bins 参数的含义是将整体数据分到几个区间内,在本例中,设置 bins = 5,表示将 ages 中的数据划分到 5 个区间内。执行完上述代码后生成的图形如下图所示:

第三章 使用 matplotlib 绘制直方图
直方图的高度表示每个区间的人数,虽然代码将数据划分到 5 个区间,但是从图形并不能明显看出每个区间的范围,下面我们为相邻区间加上一个分隔线,示例代码如下:
import numpy as np
from matplotlib import pyplot as plt

plt.style.use('fivethirtyeight')

ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55]

plt.hist(ages, bins=5, edgecolor='black')

plt.title('人员的年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')

plt.tight_layout()

plt.show()

上面的代码中,我们通过设置参数 edgecolor 为相邻区间加上了一个分隔线,加上分隔线之后的图形如下图所示:

第三章 使用 matplotlib 绘制直方图
上面的例子中,我们在调用 hist 方法时,只传入了需要划分的区间的个数,并没有规定每个区间的范围,区间范围的划定是自动进行的,当然,我们也可以通过参数来明确指定每个区间的范围。示例代码如下:
import numpy as np
from matplotlib import pyplot as plt

plt.style.use('fivethirtyeight')

ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55]

bins = [10, 20, 30, 40, 50, 60]

plt.hist(ages, bins=bins, edgecolor='black')

plt.title('人员的年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')

plt.tight_layout()

plt.show()

在上面的代码中,我们通过一个列表来指定各个区间的范围,总共划分了 5 个区间,区间的范围分别是[10,20),[20,30),[30,40),[40,50),[50,60)。年龄在 [10,20) 区间内的人数为 2,在 [20,30) 区间内的人数为 4,在 [30,40) 区间内的人数为 3,在 [40,50) 区间内的人数为 1,在 [50,60) 区间内的人数为 1。执行完上述代码后生成的图形如下图所示:

第三章 使用 matplotlib 绘制直方图
手动指定区间的好处是,如果我们不想要某个区间的数据,直接在 bins 参数中去掉就可以了。示例代码如下:
import numpy as np
from matplotlib import pyplot as plt

plt.style.use('fivethirtyeight')

ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55]

bins = [20, 30, 40, 50, 60]

plt.hist(ages, bins=bins, edgecolor='black')

plt.title('人员的年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')

plt.tight_layout()

plt.show()

在上面的代码中,我们去掉了 [10,20) 这个区间,得到的图形如下图所示:

第三章 使用 matplotlib 绘制直方图
由于直方图描述的是数据的分布,有时候我们需要画出平均值的位置,示例代码如下:
import numpy as np
from matplotlib import pyplot as plt

plt.style.use('fivethirtyeight')

ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55]

bins = [10, 20, 30, 40, 50, 60]

plt.hist(ages, bins=bins, edgecolor='black')

avg_age = 30.5

plt.axvline(avg_age, color='red', linewidth=2, label='平均值')

plt.title('人员的年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')

plt.tight_layout()
plt.legend()
plt.show()

在上面的代码中,我们通过 axvline 来画出表示平均值的一条垂直的线,得到的图形如下图所示:

第三章 使用 matplotlib 绘制直方图
在上图中,垂直的红线代表的是平均值。

三、应用场景

  • 房价分布
  • 人口年龄分布

总结

本章我们讲述了直方图的绘制以及直方图的适用场景。

上一章 使用 matplotlib 绘制条形图

Original: https://blog.csdn.net/mr_songw/article/details/124266195
Author: mr_songw
Title: 第三章 使用 matplotlib 绘制直方图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694578/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球