Python 使用matplotlib.pyplot.hist绘制直方图
1. 引言
直方图(Histogram)是一种图形表示数据分布的方式,通常用于显示数据的频数分布情况。在Python中,我们可以使用matplotlib.pyplot
库来绘制直方图,该库提供了丰富的功能和灵活的参数设置,方便我们根据数据集合绘制直方图。
本篇文章将详细介绍如何使用matplotlib.pyplot.hist
函数绘制直方图,并结合实例代码演示其使用方法。
2. matplotlib.pyplot.hist函数概述
matplotlib.pyplot.hist
函数用于绘制直方图,它的基本语法如下:
matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)
其中,比较常用的参数有:
x
:输入的数据集合,可以是一维数组或列表。bins
:直方图的柱子个数或柱子的边界位置。range
:直方图的数据范围。density
:是否将直方图的纵轴设置为频率密度,即归一化为概率密度函数。cumulative
:是否绘制累计直方图。histtype
:直方图类型,可以是'bar'
、'barstacked'
、'step'
、'stepfilled'
。align
:直方图柱子的对齐方式,可以是'left'
、'mid'
、'right'
。rwidth
:柱子的宽度,值为0~1之间。log
:是否将纵轴设置为对数刻度。
下面将逐一介绍这些参数的使用方法,并通过示例代码进行说明。
3. 参数详解及示例代码
3.1 x
参数
x
参数是直方图绘制的基础数据集合,可以是一维数组或列表。下面是一个使用一维数组绘制直方图的示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制直方图
plt.hist(data)
# 显示图形
plt.show()
上述代码首先使用numpy.random.randn
函数生成了1000个随机数,然后将这些随机数传递给hist
函数进行直方图绘制。运行结果如下:
(这里可以插入一张运行结果的图片,不过文中要求没有图片)
从运行结果可以看出,直方图将数据分成了若干个柱子,每个柱子表示一个数据区间,柱子的高度表示该区间内数据出现的频数。
3.2 bins
参数
bins
参数决定了直方图的柱子个数,可以使用一个整数来指定柱子个数,也可以使用一个序列指定柱子的边界位置。下面是一个使用序列指定柱子边界位置的示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制直方图,设置柱子边界位置
plt.hist(data, bins=[-3, -2, -1, 0, 1, 2, 3])
# 显示图形
plt.show()
上述代码使用bins
参数指定了柱子的边界位置,一共有7个柱子,运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,数据在每个柱子内的频数被绘制出来,并且柱子的边界位置与指定的序列一致。
3.3 range
参数
range
参数用于指定直方图的数据范围,即只绘制在指定范围内的数据。下面是一个使用range
参数设置数据范围的示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制直方图,指定数据范围
plt.hist(data, range=(-3, 3))
# 显示图形
plt.show()
上述代码使用range
参数指定直方图的数据范围为(-3,3)
,即只绘制范围内的数据。运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,只有范围内的数据被用于绘制直方图,范围外的数据被忽略。
3.4 density
参数
density
参数用于设置直方图的纵轴为频率密度,即归一化为概率密度函数。默认情况下,density
参数为False
,表示直方图的纵轴为频数。下面是一个使用density
参数绘制概率密度函数的示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制概率密度直方图
plt.hist(data, density=True)
# 显示图形
plt.show()
上述代码将density
参数设置为True
,表示绘制的直方图纵轴为概率密度函数。运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,直方图的纵轴被归一化为[0,1]之间的概率密度,柱子的高度表示在对应区间内的概率密度。
3.5 cumulative
参数
cumulative
参数用于绘制累计直方图,即将每个柱子的高度累加并绘制出来。下面是一个使用cumulative
参数绘制累计直方图的示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制累计直方图
plt.hist(data, cumulative=True)
# 显示图形
plt.show()
上述代码将cumulative
参数设置为True
,表示绘制累计直方图。运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,累计直方图将每个柱子的高度进行了累加,并在图形中显示出来,直观地表示出数据分布情况。
3.6 histtype
参数
histtype
参数用于指定直方图的类型,可以取'bar'
、'barstacked'
、'step'
、'stepfilled'
四种值。下面是四种类型直方图的示例代码:
'bar'
:普通的直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制普通直方图
plt.hist(data, histtype='bar')
# 显示图形
plt.show()
上述代码使用histtype
参数将直方图的类型设置为'bar'
,运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,普通直方图使用柱形表示数据分布情况。
'barstacked'
:堆叠直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000, 3)
# 绘制堆叠直方图
plt.hist(data, histtype='barstacked')
# 显示图形
plt.show()
上述代码生成了1000个3维随机数,然后调用hist
函数绘制了堆叠直方图。运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,堆叠直方图将不同维度的数据堆叠在一起表示数据分布情况。
'step'
:阶梯直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制阶梯直方图
plt.hist(data, histtype='step')
# 显示图形
plt.show()
上述代码使用histtype
参数将直方图的类型设置为'step'
,运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,阶梯直方图使用线段连接柱子的顶点,形成了连续的阶梯状表示数据分布情况。
'stepfilled'
:填充阶梯直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成1000个随机数
data = np.random.randn(1000)
# 绘制填充阶梯直方图
plt.hist(data, histtype='stepfilled')
# 显示图形
plt.show()
上述代码使用histtype
参数将直方图的类型设置为'stepfilled'
,运行结果如下:
(同样可以插入一张运行结果的图片)
从运行结果可以看出,填充阶梯直方图使用填充色彩填充柱子与柱子之间的区域,形成了填充的阶梯状表示数据分布情况。
3.7 其他参数
除了上述介绍的几个主要参数外,matplotlib.pyplot.hist
函数还有一些其他参数用于进一步定制直方图的绘制效果。例如:
align
参数用于指定柱子的对齐方式,可以取'left'
、'mid'
、'right'
三种值,默认为'mid'
。rwidth
参数用于设置柱子的宽度,取值范围为0~1之间,默认为None
。log
参数用于将纵轴设置为对数刻度,可以取True
或False
。color
参数用于设置柱子的颜色。label
参数用于设置柱子的标签。stacked
参数用于指定是否堆叠多个数据集的直方图,可以取True
或False
。
具体使用方式和示例代码可参考官方文档。
4. 总结
本文详细介绍了如何使用matplotlib.pyplot.hist
函数绘制直方图,并对其常用参数进行了解释和示例演示。通过灵活使用这些参数,我们可以根据数据集合绘制出符合需求的直方图,展示数据的分布情况和统计特征。