内容目录
直方图¶
直方图概念简介¶
直方图是一种统计图表,用矩形表示数据的分布情况。它将数据分成若干组,每组的频数(或频率)用矩形的高度表示,而组的取值范围用矩形的宽度表示。直方图通常用于展示数据的分布情况,可以帮助我们快速了解数据的集中程度、偏斜程度以及异常值情况。
直方图的主要用途包括:
- 数据分布展示: 通过直方图,我们可以直观地看出数据的分布情况,如数据的集中区间、数据的分散程度等。
- 发现异常值: 直方图可以帮助我们发现数据中的异常值,即与大部分数据明显不同的数值。
- 比较不同数据集: 通过比较不同数据集的直方图,可以快速了解它们之间的差异和相似性。
plt.hist函数说明¶
plt.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, *, data=None, **kwargs)
- x (array-like): 输入数据,可以是一维数组或序列。
- bins (int or sequence, optional): 直方图的箱子数量或者箱子边界。
- range (tuple or None, optional): 指定数据的范围,超出范围的数据将被忽略。
- density (bool, optional): 如果为True,则绘制密度直方图,即直方图的总面积为1。
- weights (array-like, optional): 每个数据点的权重。
- cumulative (bool or -1, optional): 如果为True,则绘制累积直方图。如果为一个负值,则反向绘制累积直方图。
- bottom (array-like, scalar, or None, optional): 直方图的底部位置。
- histtype ({‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}, optional): 直方图类型。
- align ({‘left’, ‘mid’, ‘right’}, optional): 直方图的对齐方式。
- orientation ({‘horizontal’, ‘vertical’}, optional): 直方图的方向。
- rwidth (scalar or None, optional): 直方图的宽度,指定为箱子宽度的比例。
- log (bool, optional): 如果为True,则绘制对数直方图。
- color (color or array-like of colors or None, optional): 直方图的颜色。
- label (str or None, optional): 直方图的标签。
- stacked (bool, optional): 如果为True,则绘制堆叠直方图。
函数详细介绍:https://matplotlib.org/3.8.4/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist
直方图示例¶
In [14]:
import matplotlib.pyplot as plt
import numpy as np
# 模拟一周内每天的气温数据
np.random.seed(0)
temperatures = np.random.normal(loc=25, scale=5, size=7) # 使用正态分布生成气温数据
# 设置中文显示字体
plt.rcParams['font.sans-serif'] = ['PingFang HK']
# 创建直方图
plt.hist(temperatures, bins=7, color='skyblue', edgecolor='black')
# 添加标题和标签
plt.title('一周内每天的气温直方图')
plt.xlabel('气温(摄氏度)')
plt.ylabel('频数')
# 显示直方图
plt.show()
bins参数¶
In [22]:
# 模拟一周内每天的气温数据
np.random.seed(0)
temperatures = np.random.normal(loc=25, scale=5, size=7) # 使用正态分布生成气温数据
# 设置中文显示字体
plt.rcParams['font.sans-serif'] = ['PingFang HK']
# bins传入序列,按照传入序列分组
nums, bins, patches = plt.hist(temperatures, bins=[18,20,27,28,29,30,31,32,33], color='skyblue', edgecolor='black')
# 添加标题和标签
plt.title('一周内每天的气温直方图')
plt.xlabel('气温(摄氏度)')
plt.ylabel('频数')
# 显示直方图
plt.show()
print(nums) # 区间内出现次数
print(bins) # 区间范围
print(patches) # 返回的
[0. 1. 1. 0. 2. 0. 0. 0.] [18. 20. 27. 28. 29. 30. 31. 32. 33.] <BarContainer object of 8 artists>
density参数示例¶
In [19]:
# 模拟一周内每天的气温数据
np.random.seed(0)
temperatures = np.random.normal(loc=25, scale=5, size=7) # 使用正态分布生成气温数据
# 设置中文显示字体
plt.rcParams['font.sans-serif'] = ['PingFang HK']
# 将density设为true,此时显示的是密度
nums, bins, patches = plt.hist(temperatures, bins=5, color='skyblue', edgecolor='black', density=True)
# 添加标题和标签
plt.title('一周内每天的气温直方图')
plt.xlabel('气温(摄氏度)')
plt.ylabel('')
# 显示直方图
plt.show()
cumulative参数示例¶
In [21]:
# 模拟一周内每天的气温数据
np.random.seed(0)
temperatures = np.random.normal(loc=25, scale=5, size=7) # 使用正态分布生成气温数据
# 设置中文显示字体
plt.rcParams['font.sans-serif'] = ['PingFang HK']
# 增加cumulative后,直方图是累积直方图
nums, bins, patches = plt.hist(temperatures, bins=5, color='skyblue', edgecolor='black', cumulative=True)
# 添加标题和标签
plt.title('一周内每天的气温直方图')
plt.xlabel('气温(摄氏度)')
plt.ylabel('')
# 显示直方图
plt.show()
增加数据标注¶
In [26]:
import matplotlib.pyplot as plt
import numpy as np
# 模拟一周内每天的气温数据
np.random.seed(0)
temperatures = np.random.normal(loc=25, scale=5, size=7) # 使用正态分布生成气温数据
# 创建直方图并获取返回值
n, bins, patches = plt.hist(temperatures, bins=5, color='skyblue', edgecolor='black')
# 添加数据标注
for i in range(len(n)):
plt.text(bins[i] + (bins[i+1] - bins[i]) / 2, n[i], f'{n[i]}', ha='center', va='bottom')
# 添加标题和标签
plt.title('一周内每天的气温直方图')
plt.xlabel('气温(摄氏度)')
plt.ylabel('频数')
plt.show()