matplotlib.pyplot.hist(x, bins=None, density=None, alpha,
histtype='bar', color=None)
hist的常用参数介绍
- x:输入数据,直方图对数据x分区间统计
- bins:统计的区间分布,形如 [0,2,4,6],则统计x在区间[0,2]、[2,4]、[4,6]的频数
- density:bool型,默认为false,即显示频数,true显示频率,注意频率的计算方法是
该 区 间 频 数 样 本 总 数 ⋅ 区 间 宽 度 \frac{该区间频数}{样本总数\cdot 区间宽度} 样本总数⋅区间宽度该区间频数 - histtype: 直方图形状,可选{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}之一,默认为bar
- alpha:透明度,0表示完全透明
Example
import numpy as np
import matplotlib.pyplot as plt
lim = 4
width = 0.4
x = np.random.normal(0, 1, 10000) # 生成均值为0,方差为1的正太分布点10000个
bins = np.arange(-lim, lim, width) # 设置直方图的分布区间 start->end step
# 直方图会进行统计各个区间的数值
frequency_each, _1, _2 = plt.hist(x,
bins,
color='fuchsia',
alpha=1,
density=True) # alpha设置透明度,0为完全透明
plt.xlim(-lim, lim) # 设置x轴分布范围
plt.show()
函数会返回统计频率或频数frequency_each,可以用来拟合密度曲线,加入如下语句。注意bins的长度比frequency_each多1,因为bins是边界点,所以可以从bins的第2个元素开始,计算frequencyeach中每个元素对应的中心点,将其作为横坐标,frequency_each作为纵坐标绘制密度曲线。
lim = 4
band_h = 0.4 # 间隔宽度
x = np.random.normal(0, 1, 10000) # 生成均值为0,方差为1的正太分布点10000个
bins = np.arange(-lim, lim, band_h) # 设置直方图的分布区间 start->end step
# 直方图会进行统计各个区间的数值
cnts = plt.hist(x,
bins,
color='fuchsia',
alpha=1,
density=True) # alpha设置透明度,0为完全透明
plt.xlim(-lim, lim) # 设置x轴分布范围
plt.plot(cnts[1][1:] - band_h / 2, cnts[0])
plt.show()
也可以直接返回统计频率
lim = 4
band_h = 0.4
x = np.random.normal(0, 1, 10000) # 生成均值为0,方差为1的正太分布点10000个
bins = np.arange(-lim, lim, band_h) # 设置直方图的分布区间 start->end step
# 直方图会进行统计各个区间的数值
cnts = plt.hist(x,
bins,
color='fuchsia',
alpha=1) # alpha设置透明度,0为完全透明
plt.xlim(-lim, lim) # 设置x轴分布范围
plt.plot(cnts[1][1:] - band_h / 2, cnts[0])
plt.show()