matlab中hist函数用法(MATLAB hist函数用法)


MATLAB中的hist函数是数据分析与可视化领域的核心工具之一,其功能涵盖直方图绘制、数据分布统计及频率计算等多个维度。自MATLAB早期版本起,hist函数便作为基础绘图函数被广泛使用,但随着版本迭代,其部分功能逐渐被更灵活的histogram函数取代。当前版本中,hist函数仍保留向下兼容性,但在参数设计、归一化选项及输出结构上存在显著差异。该函数既可通过简单参数快速生成直方图,也可通过复杂配置实现精细控制,其核心价值在于将离散数据转化为直观的分布特征,为后续统计分析或特征提取提供依据。然而,其参数逻辑与现代函数的设计差异可能对新手造成困惑,需结合具体场景权衡使用方式。
一、基本语法与功能定位
hist函数的核心作用是将输入向量按区间划分为多个 bin,统计各区间内的数据频数并绘制柱状图。其最小调用形式为:
hist(data)
此时默认以自动计算的 bin 数量(通常为 square-root 规则)生成直方图。若需指定参数,则扩展为:
hist(data, bins)
其中 `bins` 可为整数(表示分段数)或向量(表示边界值)。例如:
hist(data, 20); % 分为20组
hist(data, -5:0.5:10); % 自定义边界
参数类型 | 说明 | 示例 |
---|---|---|
单一整数 | 按等宽划分指定数量的区间 | hist(data, 30) |
向量[start:end] | 以步长1生成区间边界 | hist(data, -3:0.5:5) |
向量[edges] | 使用自定义边界(长度需为n+1) | hist(data, [-5,-2,0,2,5]) |
二、关键参数解析与数据分组逻辑
hist函数的核心参数包括输入数据、分组方式及归一化选项,其交互逻辑直接影响输出结果。
参数 | 作用 | 取值范围 |
---|---|---|
data | 输入数据向量 | 数值型向量/矩阵(自动简化为单列) |
bins | 分组配置 | 整数或向量 |
'normalization' | 归一化模式 | 'probability'/'count'/'pdf'/'cumcount' |
'orientation' | 图形方向 | 'vertical'/'horizontal' |
数据分组遵循“左闭右开”原则,例如边界向量 `[1,3,5]` 会将数据分为 `[1,3)` 和 `[3,5)` 两个区间。若数据中包含边界值(如3),则会被划入后一个区间。此特性在处理连续型数据时需特别注意。
三、归一化模式与统计意义
通过 `'normalization'` 参数可改变纵轴含义,不同模式对应不同的统计目标:
模式 | 计算公式 | 适用场景 |
---|---|---|
'count' | 频数统计(默认) | 原始数据分布观察 |
'probability' | 频数/总样本数 | 概率密度估计 |
'pdf' | 概率密度函数(需除以组距) | 连续分布拟合 |
'cumcount' | 累积频数 | 累计分布分析 |
例如,当需要将直方图与概率密度函数(PDF)对比时,应使用 `'pdf'` 模式并确保组距一致。而 `'probability'` 模式更适合快速验证数据分布比例。
四、输出参数与数据提取
hist函数可通过输出变量获取统计结果,例如:
[counts, edges] = hist(data, bins);
其中:
- counts:长度为n的向量,表示各区间频数- edges:长度为n+1的向量,表示区间边界此功能常用于后续计算(如卡方检验)或自定义绘图。例如,结合bar函数可手动调整直方图样式:
bar(edges(1:end-1), counts, 'histc'); % 使用原hist颜色
五、可视化增强技巧
默认绘制的直方图可通过以下方式优化:
1. 边缘颜色调整:设置 `'EdgeColor','none'` 消除柱体间隙2. 透明度控制:通过 `'FaceAlpha'` 参数设置填充透明度
3. 坐标轴适配:使用 `axis tight` 自动缩放坐标范围
4. 分组对比:对多组数据调用多次hist并叠加 例如,绘制双峰分布对比的代码如下:
hist(data1, 50, 'FaceColor','r', 'EdgeColor','k');
hold on;
hist(data2, 50, 'FaceColor','b', 'EdgeColor','k');
六、与其他函数的本质区别
hist函数与histogram、bar、count函数的功能存在交叉,但其设计目标不同:
函数 | 核心功能 | 输出特性 |
---|---|---|
hist | 快速统计与绘图一体化 | 自动计算分组,返回统计量 |
histogram | 现代化参数化直方图 | 支持更多显示选项,输出对象可修改 |
bar | 通用柱状图绘制 | 需手动输入高度与位置数据 |
accumarray | 多维数据统计 | 返回数值矩阵,无绘图功能 |
对于需要精确控制分组边界或动态修改图形属性的场景,推荐使用histogram函数;若仅需简单统计且无需保留图形对象,hist函数仍具效率优势。
七、版本兼容性与替代方案
自MATLAB R2014b起,hist函数被标记为“不推荐使用”,建议新项目采用histogram函数。两者关键差异包括:
特性 | hist | histogram |
---|---|---|
归一化参数 | 字符串(如'pdf') | 枚举类型('probability'等) |
透明度控制 | 无直接参数 | 'FaceAlpha'属性 |
显示模式 | 仅绘图 | 可返回`Histogram`对象 |
负值处理 | 允许负区间 | 需显式设置`BinWidth` |
迁移至histogram的典型代码改写示例:
% 原hist代码
hist(data, 30, 'normalization', 'probability');% 新版histogram代码
h = histogram(data, 30, 'Normalization', 'probability');
h.FaceColor = 'auto'; % 兼容原有颜色逻辑
八、典型应用场景与限制
适用场景:
- 快速验证数据分布形态(如正态性、偏态)- 图像处理中的灰度直方图分析
- 信号处理中的噪声分布统计
- 机器学习中的特征分布可视化 局限性:1. 固定分组逻辑:无法自动处理离群值(需手动设置边界)
2. 低版本兼容性:R2015b前的版本不支持透明属性
3. 交互性不足:不如histogram对象支持动态编辑 例如,在分析图像直方图时,需注意数据范围可能超出默认分组:
img = imread('cameraman.tif');
hist(double(img(:)), 256); % 强制分为256组匹配灰度范围
通过上述多维度分析可知,hist函数在MATLAB中扮演着数据初探与快速可视化的重要角色,但其参数设计与现代需求存在一定脱节。在实际工程中,建议根据MATLAB版本选择合适工具:旧版本优先使用hist,新版本推荐过渡至histogram函数。无论何种选择,理解其分组逻辑与归一化原理始终是正确应用的前提。





