- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线版
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据导出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策语句
- MATLAB - if 语句
- MATLAB - if-else 语句
- MATLAB - if-elseif-else 语句
- MATLAB - 嵌套 if 语句
- MATLAB - switch 语句
- MATLAB - 嵌套 switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - for 循环
- MATLAB - while 循环
- MATLAB - 嵌套循环
- MATLAB - break 语句
- MATLAB - continue 语句
- MATLAB - end 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - return 语句
- MATLAB - 无返回值函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - filter 函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级
- MATLAB - map 函数
- MATLAB - mean 函数
- MATLAB - end 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - try...catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB 直方图
- MATLAB - 图形
- MATLAB - 二维线图
- MATLAB - 三维图
- MATLAB - 格式化绘图
- MATLAB - 对数坐标轴绘图
- MATLAB - 绘制误差条
- MATLAB - 绘制三维等高线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面图
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 二维数组插值
- MATLAB - 三维数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换函数
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 二维逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户自定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约当消元法
- MATLAB - 简化行阶梯形
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 其他
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB 直方图
直方图是图形化地显示数值数据分布的图表。MATLAB 提供了一个方便的函数 `histogram` 来创建直方图,允许用户可视化数据集在不同区间或箱中的频率或概率分布。
语法
histogram(X) histogram(X,nbins) histogram(X,edges) histogram('BinEdges',edges,'BinCounts',counts) histogram(C) histogram(C,Categories) histogram('Categories',Categories,'BinCounts',counts)
语法的详细解释:
histogram(X) - `histogram(X)` 函数根据 X 中的数据生成直方图。此函数采用自动分箱方法,生成宽度相等的箱,旨在涵盖 X 中的值范围并揭示固有的分布模式。输出显示为矩形条,每个条的高度表示落入相应箱中的元素数量。
histogram(X,nbins) - `histogram(X, nbins)` 函数允许您定义直方图中要使用的箱的数量。
histogram(X,edges) - `histogram(X, edges)` 函数将 X 中的数据组织到由向量中指定的边缘确定的箱中。
histogram('BinEdges',edges,'BinCounts',counts) - `histogram('BinEdges', edges, 'BinCounts', counts)` 函数直接绘制提供的箱计数,无需对数据进行任何分箱。
histogram(C) - `histogram(C)` 函数生成一个直方图,显示分类数组 C 中每个类别的条形。
histogram(C,Categories) - `histogram(C, Categories)` 函数专门绘制分类数组 C 中选择的类别。
histogram('Categories',Categories,'BinCounts',counts) - `histogram('Categories', Categories, 'BinCounts', counts)` 函数允许手动指定类别及其各自的箱计数。然后,直方图绘制提供的箱计数,无需进行任何数据分箱。
直方图属性
直方图函数返回一个对象。
直方图的属性控制其外观和功能。更改这些属性值可以调整直方图的各个方面。使用点表示法访问特定的对象属性:
h = histogram(randn(10,1)); c = h.BinWidth; h.BinWidth = 2;
直方图中的箱
在直方图中,箱代表数据被划分到的区间。这些区间涵盖数据的范围,并用于计算落在每个区间中的观测值的频率。本质上,箱定义了分隔不同数据值范围的边界,直方图中条形的高度对应于落入每个箱中的数据点的频率或计数。调整箱的数量或宽度会影响分布的可视化方式,可能揭示更多细节或平滑数据的表示。
箱的数量
箱的数量由正整数表示。当未指定 `NumBins` 时,直方图函数会根据提供的数据自动确定合适的箱数。如果您同时使用 `NumBins`、`BinMethod`、`BinWidth` 或 `BinEdges`,直方图函数只考虑最后一个参数。
箱的宽度
箱的宽度表示一个正标量值。当您定义 `BinWidth` 时,直方图最多可以使用 65,536 个箱(或 216)。如果指定的箱宽度需要更多箱,直方图会调整为更大的箱宽度,以适应最大箱数。对于日期时间和持续时间数据,`BinWidth` 可以是标量持续时间或日历持续时间。当您同时使用 `BinWidth`、`BinMethod`、`NumBins` 或 `BinEdges` 时,直方图函数只考虑最后一个参数。
示例 - `histogram(X,'BinWidth',5)` 使用宽度为 5 个单位的箱。
箱的边缘
箱的边缘由数值向量定义,其中第一个元素表示第一个箱的起始边缘,最后一个元素表示最后一个箱的结束边缘。最后一个边缘仅考虑最后一个箱。如果没有指定箱边缘,直方图函数会自动计算这些边缘。如果您同时使用 `BinEdges`、`BinMethod`、`BinWidth`、`NumBins` 或 `BinLimits`,直方图函数会优先考虑 `BinEdges`,并且它必须是提供的最后一个参数。
箱的限制
箱的限制由一个包含两个元素的向量 [bmin, bmax] 定义,其中第一个值表示第一个箱的起始边缘,第二个值表示最后一个箱的结束边缘。使用这些限制只计算包含在这些箱限制内的(包括边界)数据,表示为 X>=bmin & X<=bmax。
示例 - `histogram(X,'BinLimits',[1,10])` 只对介于 1 和 10 之间(包括边界)的值进行分箱。
直方图中的类别
在 MATLAB 中,当使用直方图函数处理分类数据时,“类别”指的是要可视化的分类数组中的不同组或标签。为分类数据创建直方图时,每个唯一类别将具有自己的条形,条形的高度表示该特定类别在数据集中出现的频率或计数。
包含在直方图中的类别
直方图中表示的类别由字符向量的元胞数组、分类数组、字符串数组或模式标量定义。
示例 - `h = histogram(C,{'Large','Small'})` 创建一个直方图,只显示与类别“Large”和“Small”关联的分类数据。
创建基本直方图
MATLAB 中的直方图函数生成直方图。这是一个简单的示例:
示例 1:创建基本直方图
这段代码根据从标准正态分布 (randn) 采样的 1000 个随机数生成直方图。直方图函数会根据数据自动确定合适的箱数。
% Generating sample data (1000 random numbers from a normal distribution) data = randn(1000, 1); % Creating a histogram histogram(data);
在 MATLAB 命令窗口中执行相同的操作,输出结果为:
让我们来看另一个类似的例子,如下所示:
例2:使用直方图对象查找直方图区间
这段代码将根据5000个随机数生成一个直方图。直方图函数会自动选择最佳区间数来涵盖x中的值范围,有效地说明了分布的形式。
x = randn(5000,1); h = histogram(x)
在Matlab命令窗口中执行后的输出为:
如果为直方图函数指定一个输出,它将提供一个直方图对象。此对象可以检查直方图属性,例如区间计数或区间宽度。
带有方法和属性的直方图对象如下所示:
>> x = randn(5000,1); h = histogram(x) h = Histogram with properties: Data: [5000x1 double] Values: [2 2 0 1 4 9 15 26 46 65 105 129 151 194 279 303 360 382 389 410 412 346 310 260 221 175 111 ... ] (1x37 double) NumBins: 37 BinEdges: [-3.8000 -3.6000 -3.4000 -3.2000 -3 -2.8000 -2.6000 -2.4000 -2.2000 -2 -1.8000 -1.6000 ... ] (1x38 double) BinWidth: 0.2000 BinLimits: [-3.8000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Show all properties Annotation: [1x1 matlab.graphics.eventdata.Annotation] BeingDeleted: off BinCounts: [2 2 0 1 4 9 15 26 46 65 105 129 151 194 279 303 360 382 389 410 412 346 310 260 ... ] (1x37 double) BinCountsMode: 'auto' BinEdges: [-3.8000 -3.6000 -3.4000 -3.2000 -3 -2.8000 -2.6000 -2.4000 -2.2000 -2 -1.8000 ... ] (1x38 double) BinLimits: [-3.8000 3.6000] BinLimitsMode: 'auto' BinMethod: 'auto' BinWidth: 0.2000 BusyAction: 'queue' ButtonDownFcn: '' Children: [0x0 GraphicsPlaceholder] ContextMenu: [0x0 GraphicsPlaceholder] CreateFcn: '' Data: [5000x1 double] DataTipTemplate: [1x1 matlab.graphics.datatip.DataTipTemplate] DeleteFcn: '' DisplayName: 'x' DisplayStyle: 'bar' EdgeAlpha: 1 EdgeColor: [0 0 0] FaceAlpha: 0.6000 FaceColor: 'auto' HandleVisibility: 'on' HitTest: on Interruptible: on LineStyle: '-' LineWidth: 0.5000 Normalization: 'count' NumBins: 37 Orientation: 'vertical' Parent: [1x1 Axes] PickableParts: 'visible' Selected: off SelectionHighlight: on SeriesIndex: 1 Tag: '' Type: 'histogram' UserData: [] Values: [2 2 0 1 4 9 15 26 46 65 105 129 151 194 279 303 360 382 389 410 412 346 310 260 ... ] (1x37 double) Visible: on
要查找直方图区间的数量,可以执行以下操作:
nbins = h.NumBins
在Matlab命令窗口中执行结果如下:
>> nbins = h.NumBins nbins = 37 >>
例3
让我们绘制一个包含5000个随机数的直方图,这些随机数被分成25个等间距的区间。
x = randn(5000,1); nbins = 25; h = histogram(x,nbins)
执行后的输出如下:
让我们使用以下代码查找区间计数:
counts = h.Values
在Matlab命令窗口中执行后的输出为:
>> counts = h.Values counts = Columns 1 through 21 2 5 13 23 54 106 167 231 337 419 505 538 570 550 464 357 254 181 109 50 37 Columns 22 through 25 14 9 3 2 >>
例4:绘制分类直方图
在这个例子中,我们将生成一个表示投票结果的分类向量。向量中的类别是“是”、“否”或“未决定”。
A = [0 0 1 1 1 0 0 0 0 NaN NaN 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1]; C = categorical(A,[1 0 NaN],{'yes','no','undecided'})
在Matlab命令窗口中执行后的输出为:
>> A = [0 0 1 1 1 0 0 0 0 NaN NaN 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1]; C = categorical(A,[1 0 NaN],{'yes','no','undecided'}) C = 1x27 categorical array Columns 1 through 13 no no yes yes yes no no no no undecided undecided yes no Columns 14 through 27 no no yes no yes no yes no no no yes yes yes yes >>
使用分类数据,让我们绘制投票结果的分类直方图,使用0.5的相对条形宽度。