目录

MATLAB直方图全解析

MATLAB直方图全解析

直方图(Histogram)是数据可视化中最基础的图表之一,用于直观展示连续数据的分布特征。在MATLAB中,直方图不仅支持快速生成,还具备强大的数学运算和高度可定制的视觉效果,能够满足科研、工程和商业分析的多样化需求。

直方图通过等宽区间(Bin)将数据划分为若干子集,统计每个区间内的观测频数(或频率),形成一系列相邻的矩形条。其核心参数包括:

  • 区间数(Number of Bins) :决定直方图的分辨率和统计误差。
  • 区间宽度(Bin Width) :与区间数互相关联,直接影响分布形态的表达。
  • 归一化方式 :可选择显示频数(Count)或概率密度(Probability)。

https://i-blog.csdnimg.cn/direct/4be76fb1280a4d609d015a03b4ac5e50.png

图表类型优点缺点
直方图直观展示数据分布、易于实现依赖区间划分、掩盖细节信息
核密度估计图(KDE)无参数依赖、显示平滑分布对小样本敏感,存在过拟合风险
条形图适合离散数据对比难以展示连续变量分布

data = randn(1000,1); % 生成正态分布数据 figure; histogram(data); title(‘基础直方图(默认参数)’); xlabel(‘数值’); ylabel(‘频数’); grid on; https://i-blog.csdnimg.cn/direct/dccc5fc1c6a742c0a49d51449a1db962.png

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互斥) ); https://i-blog.csdnimg.cn/direct/bebf26bbfadd4db196993cac4caee141.png

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(‘直方图’, ‘理论正态分布’); https://i-blog.csdnimg.cn/direct/66c48ade2cae47e58cd3c685dad56f5d.png


% 生成三组不同分布的数据 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]); https://i-blog.csdnimg.cn/direct/0669fe39b166405ebad55145ed55a6bd.png

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; https://i-blog.csdnimg.cn/direct/0c8e526dfb60499987841e43a14ec2c1.png

figure; histogram(data, ‘Normalization’, ‘cdf’); % 累积分布函数模式 hold on; plot(x, normcdf(x, mu, sigma), ‘r-’, ‘LineWidth’, 2); % 叠加理论CDF title(‘累积分布直方图对比’); legend(‘经验CDF’, ‘理论正态CDF’); https://i-blog.csdnimg.cn/direct/ab9e6d8af9554f06b3b86a25b7e37f93.png


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 https://i-blog.csdnimg.cn/direct/32c737b0824748ec96b249799bcc3915.png

% 生成二维正态分布数据 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(‘二维直方图(热力图风格)’); https://i-blog.csdnimg.cn/direct/6e77ae9d3e11423f9f95cffbe100c777.png


MATLAB直方图功能远超基础的频数统计,通过灵活的区间划分规则、归一化选项以及与概率模型的结合,能够支撑从探索性数据分析到严格科研验证的全流程需求。通过本文提供的代码模板与高阶技巧,用户可快速实现复杂场景下的直方图分析与自动化报告生成。