MATLAB直方图全解析
创作时间:
作者:
@小白创作中心
MATLAB直方图全解析
引用
CSDN
1.
https://blog.csdn.net/weixin_31268759/article/details/146167549
直方图是数据可视化中最基础的图表之一,用于直观展示连续数据的分布特征。在MATLAB中,直方图不仅支持快速生成,还具备强大的数学运算和高度可定制的视觉效果,能够满足科研、工程和商业分析的多样化需求。
一、直方图的核心概念与数学原理
1. 直方图的结构与定义
直方图通过等宽区间(Bin)将数据划分为若干子集,统计每个区间内的观测频数(或频率),形成一系列相邻的矩形条。其核心参数包括:
- 区间数(Number of Bins):决定直方图的分辨率和统计误差。
- 区间宽度(Bin Width):与区间数互相关联,直接影响分布形态的表达。
- 归一化方式:可选择显示频数(Count)或概率密度(Probability)。
2. 数学模型
直方图的数学模型基于概率论和统计学原理,通过将数据空间分割成有限个区间(bins),计算每个区间内数据点的数量或概率密度,从而形成对数据分布的近似表示。这种近似表示能够帮助我们直观地理解数据的分布特征,如集中趋势、离散程度以及异常值的存在情况。
3. 与相关图表的对比
图表类型 | 优点 | 缺点 |
---|---|---|
直方图 | 直观展示数据分布、易于实现 | 依赖区间划分、掩盖细节信息 |
核密度估计图(KDE) | 无参数依赖、显示平滑分布 | 对小样本敏感,存在过拟合风险 |
条形图 | 适合离散数据对比 | 难以展示连续变量分布 |
二、MATLAB基础直方图绘制
1. 使用 histogram
函数
(1) 基础语法
data = randn(1000,1); % 生成正态分布数据
figure;
histogram(data);
title('基础直方图(默认参数)');
xlabel('数值');
ylabel('频数');
grid on;
(2) 关键参数设置
data = randn(1000,1); % 生成正态分布数据
figure;
histogram(data);
title('基础直方图(默认参数)');
xlabel('数值');
ylabel('频数');
grid on;
% 自定义区间数与样式
histogram(data, ...
'NumBins', 20, ... % 设置区间数
'FaceColor', [0.2 0.6 0.9], ... % 填充颜色
'EdgeColor', 'black', ... % 边线颜色
'FaceAlpha', 0.7, ... % 透明度
'BinWidth', 0.5 ... % 指定区间宽度(与NumBins互斥)
);
2. 归一化与概率密度
data = randn(1000,1); % 生成正态分布数据
figure;
histogram(data);
title('基础直方图(默认参数)');
xlabel('数值');
ylabel('频数');
grid on;
% 自定义区间数与样式
histogram(data, ...
'NumBins', 20, ... % 设置区间数
'FaceColor', [0.2 0.6 0.9], ... % 填充颜色
'EdgeColor', 'black', ... % 边线颜色
'FaceAlpha', 0.7, ... % 透明度
'BinWidth', 0.5 ... % 指定区间宽度(与NumBins互斥)
);
% 转换为概率密度(总面积=1)
histogram(data, 'Normalization', 'pdf');
hold on;
% 叠加理论正态分布曲线
x = linspace(min(data), max(data), 100);
mu = mean(data);
sigma = std(data);
pdf_normal = normpdf(x, mu, sigma);
plot(x, pdf_normal, 'r-', 'LineWidth', 2);
legend('直方图', '理论正态分布');
三、实战案例:多维数据与高级应用
1. 多维数据分布对比
(1) 并排直方图
% 生成三组不同分布的数据
data1 = randn(1000,1);
data2 = rand(1000,1)*6 - 3;
data3 = trnd(5,1000,1); % t分布(自由度为5)
figure;
subplot(1,3,1);
histogram(data1, 'FaceColor', 'blue');
title('正态分布');
xlim([-5 5]);
subplot(1,3,2);
histogram(data2, 'FaceColor', 'red');
title('均匀分布');
xlim([-5 5]);
subplot(1,3,3);
histogram(data3, 'FaceColor', 'green');
title('t分布');
xlim([-5 5]);
(2) 重叠直方图
figure;
hold on;
histogram(data1, 'BinWidth', 0.5, 'FaceAlpha', 0.5, 'FaceColor', 'b');
histogram(data2, 'BinWidth', 0.5, 'FaceAlpha', 0.5, 'FaceColor', 'r');
histogram(data3, 'BinWidth', 0.5, 'FaceAlpha', 0.5, 'FaceColor', 'g');
xlabel('数值');
ylabel('频数');
legend('正态分布', '均匀分布', 't分布');
title('多分布重叠直方图');
hold off;
2. 累计直方图(Cumulative Histogram)
figure;
histogram(data, 'Normalization', 'cdf'); % 累积分布函数模式
hold on;
plot(x, normcdf(x, mu, sigma), 'r-', 'LineWidth', 2); % 叠加理论CDF
title('累积分布直方图对比');
legend('经验CDF', '理论正态CDF');
四、进阶技巧与性能优化
1. 自动最佳区间数选择
MATLAB内置多种区间数计算规则,可通过 'BinMethod'
参数调用:
% 使用不同算法
methods = {'auto', 'sqrt', 'sturges', 'scott', 'fd'};
figure;
for i = 1:5
subplot(2,3,i);
histogram(data, 'BinMethod', methods{i});
title(['BinMethod = ', methods{i}]);
end
2. 二维直方图(Histogram2)
% 生成二维正态分布数据
x = randn(10000,1);
y = x*0.5 + randn(10000,1)*0.5;
% 绘制二维直方图
figure;
histogram2(x, y, ...
'BinWidth', [0.3 0.3], ...
'FaceColor', 'flat', ... % 根据高度染色
'ShowEmptyBins', 'on', ...
'EdgeColor', 'none');
colormap hot;
colorbar;
xlabel('X');
ylabel('Y');
title('二维直方图(热力图风格)');
总结
MATLAB直方图功能远超基础的频数统计,通过灵活的区间划分规则、归一化选项以及与概率模型的结合,能够支撑从探索性数据分析到严格科研验证的全流程需求。通过本文提供的代码模板与高阶技巧,用户可快速实现复杂场景下的直方图分析与自动化报告生成。
热门推荐
如何通过技术分析把握黄金市场?这种分析方法的准确性如何提高?
乌鲁木齐地铁2号线建设新进展:电动客车招标启动,计划2026年6月开通
研究发现:久坐易诱发早死,但喝点儿咖啡或能抵消危害
双电源切换开关,PC级和CB级的区别是什么?如何选择?
案件现场勘验程序及其实施步骤
1911年斯里兰卡发现明代石碑,内容翻译后,披露郑和下西洋的意图
宠物蛇饲养物品有哪些 养宠物蛇需要准备的十样东西
黑盒测试方法的终极指南:如何高效发现软件缺陷?
U盘接口版本大揭秘:USB 2.0 vs USB 3.0
在外尔半金属TaIrTe4中观察到“室温三阶非线性霍尔效应”|NSR
王者荣耀:S35赛季首个T0辅助,胜率超过朵莉亚,会支援就能上分
鬃狮蜥饲养方法及环境布置
质量管理体系文件编写指南:从结构到定制化解决方案
稿酬的个人所得税的计算方式
认养农业小程序开发:功能、技术与用户体验优化
荆轲刺秦王的匕首哪里来的?制作者真的是徐夫人?
体检发现尿隐血阳性怎么办?
银行的手机银行功能拓展对客户使用频率的影响?
雪花酥制作教程
墨西哥一共丧失多少领土:先独立出去6个国家,后被美国占领一半
金属的钝化现象
为什么需要一个标准化的工作交接清单模板?
为特殊儿童点亮未来——特殊儿童评估与个别化教育计划制定培训
保險客戶關係:如何建立價值、信任和忠誠度
“AI+专家”助力基层中医:大经中医智能辅助诊疗系统实践案例
胎儿大小和孕周不一致的情况,要如何纠正预产期?
1965年属蛇什么命
腰肌劳损的锻炼方法有哪些?
仲裁机构可以调取证据吗
48V、60V、72V电动车能跑多少公里?电压越高跑得越远?答案来了