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直方图功能远超基础的频数统计,通过灵活的区间划分规则、归一化选项以及与概率模型的结合,能够支撑从探索性数据分析到严格科研验证的全流程需求。通过本文提供的代码模板与高阶技巧,用户可快速实现复杂场景下的直方图分析与自动化报告生成。
热门推荐
如何让数学课堂更贴近生活,有效唤起小学生的数学学习热情?
Excel图片打印发黑怎么办?10个实用解决方案帮你轻松应对
泡沫軸按摩:如何改善訓練和恢復
Excel中将单元格设置为0的多种方法
重大突破!我国科学家成功提升金属材料在长期使用中的抗疲劳能力
电力调整器的输出电压控制是什么
如何通过PECVD工艺优化专利提升薄膜材料的性能与应用潜力?
陈姓的起源与发展:华夏大姓的历史变迁与文化传承
什么是氢气加注站建设
东南大学校训、校徽、校歌及其含义是什么
解绑手机的步骤和注意事项详解:从解绑流程到安全保护须知
中国四大名楼:千年文化传承的见证
寿险投保需要注意哪些 返还型寿险有必要买吗
含氟牙膏的好处和坏处
谢咏详解八字偏财格的特点,八字偏财格是不是很有钱
心学问青少年教育,孩子沉迷游戏?家长如何设置合理的游戏时间?
蛀牙修复多少钱一颗?蛀牙治疗大不同:不同材料、技术决定你的钱包厚度
化妆新手也能学会的全能指南:从基础到进阶的化妆技巧详解
房产查询方法
老年人冬季养生食谱推荐
从《无双》看港片的“真假”魅力:情怀与创新的博弈
期货苯乙烯的价格波动如何分析?分析结果有哪些应用?
杂食性动物:生态系统中的“全能选手”
采样定理的证明与推导
口腔诊所和医院哪个更可靠?
如何评估一款汽车的动力性能?这种动力性能在不同路况下如何表现?
消杀、杀菌除螨、灭四害的全面指南
解除劳动合同的经济补偿标准是怎么规定的?
宋氏美学设计:穿越千年的极简主义,把《清平乐》搬进现代家
古今同美:从宋代风格到现代设计的传承与融合