本页翻译不是最新的。点击此处可查看最新英文版本。
直方图
全页展开
说明
直方图是一种条形图,它将数据分组为 bin。创建 Histogram
对象后,可以通过更改直方图的属性值修改它的各个方面。这对快速修改 bin 属性或更改显示特别有用。
创建对象
语法
histogram(X)
histogram(X,nbins)
histogram(X,edges)
histogram('BinEdges',edges,'BinCounts',counts)
histogram(C)
histogram(C,Categories)
histogram('Categories',Categories,'BinCounts',counts)
histogram(___,Name,Value)
histogram(ax,___)
h = histogram(___)
描述
histogram(X)
基于 X
创建直方图。histogram
函数使用自动分 bin 算法,然后返回均匀宽度的 bin,这些 bin 可涵盖 X
中的元素范围并显示分布的基本形状。histogram
将 bin 显示为矩形条,这样每个矩形的高度就表示 bin 中的元素数量。
示例
histogram(X,nbins)
指定 bin 的数量。
示例
histogram(X,edges)
将 X
划分为在向量中指定 bin 边界的 bin。
示例
histogram('BinEdges',edges,'BinCounts',counts)
绘制指定的 bin 计数,而不执行任何数据分 bin。
histogram(C)
通过为分类数组 C
中的每个类别绘制一个条形来绘制直方图。
示例
histogram(C,Categories)
只绘制 C
中类别的子集。
histogram('Categories',Categories,'BinCounts',counts)
手动指定类别和关联的 bin 计数。histogram
绘制指定的 bin 计数,而不执行任何数据分 bin。
histogram(___,Name,Value)
使用一个或多个名称-值参量为上述任一语法指定其他参数。例如,指定 Normalization
以使用不同类型的归一化。有关属性列表,请参阅 Histogram 属性。
示例
histogram(ax,___)
在指定的坐标区中而不是当前坐标区 (gca
) 中绘图。ax
可以位于上述语法中的任何输入参量组合之前。
h = histogram(___)
返回 Histogram
对象。使用此语法可检查并调整直方图的属性。有关属性列表,请参阅 Histogram 属性。
示例
输入参量
全部展开
X
— 要分布到各 bin 的数据
向量 | 矩阵 | 多维数组
要分布到各 bin 的数据,指定为向量、矩阵或多维数组。histogram
将矩阵和多维数组数据视为单个列向量 X(:)
,并绘制单个直方图。
histogram
忽略所有 NaN
和 NaT
值。同样,histogram
忽略 Inf
和 -Inf
值,除非 bin 边界将 Inf
或 -Inf
显式指定为 bin 边界。虽然 NaN
、NaT
、Inf
和 -Inf
值通常情况下不会绘制,但在包括所有数据元素的归一化计算(如 'probability'
)中,仍然会包含这些值。
注意
如果 X
包含类型为 int64
或 uint64
且大于 flintmax
的整数,则建议您显式指定直方图 bin 边界。histogram
会自动使用双精度对输入数据进行分 bin,这些数据缺少大于 flintmax
的数字的整数精度。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| datetime
| duration
C
— 分类数据
分类数组
分类数据,指定为分类数组。histogram
不会绘制未定义的分类值。但在包括所有数据元素的归一化计算(如 'probability'
)中,仍然会包含未定义的分类值。
数据类型: categorical
nbins
— bin 数量
正整数
bin 数量,指定为正整数。如果未指定 nbins
,则 histogram
根据 X
中的值确定 bin 的数量。
如果用 BinMethod
、BinWidth
或 BinEdges
指定 nbins
,则 histogram
仅采用最后一个参数。
示例: histogram(X,15)
创建一个带 15 个 bin 的直方图。
edges
— bin 边界
向量
bin 边界,指定为向量。edges(1)
是第一个 bin 的左边界,edges(end)
是最后一个 bin 的右边界。
每个 bin 都包含左边界,但不包含右边界,除了同时包含两个边界的最后一个 bin 外。
对于 datetime
和 duration
数据,edges
必须为单调递增顺序的 datetime
或 duration
向量。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| datetime
| duration
counts
— bin 计数
向量
bin 计数,指定为向量。当单独执行 bin 计数计算且不希望 histogram
执行任何数据分 bin 时,可使用此输入将 bin 计数传递给 histogram
。
counts
的大小必须等于 bin 的数量。
对于数值直方图,bin 的数量为
length(edges)-1
。对于分类直方图,bin 的数量等于类别的数量。
示例: histogram('BinEdges',-2:2,'BinCounts',[5 8 15 9])
示例: histogram('Categories',{'Yes','No','Maybe'},'BinCounts',[22 18 3])
ax
— 目标坐标区
Axes
对象 | PolarAxes
对象
目标坐标区,指定为 Axes
对象或 PolarAxes
对象。如果您不指定坐标区而且当前坐标区是笛卡尔坐标区,histogram
函数将使用当前坐标区 (gca
)。要在极坐标区上绘图,请指定 PolarAxes
对象作为第一个输入参量,或者使用 polarhistogram 函数。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: histogram(X,BinWidth=5)
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: histogram(X,'BinWidth',5)
注意
此处所列的属性只是一部分。有关完整列表,请参阅 Histogram 属性。
bin
类别
全部展开
数据
全部展开
颜色和样式
全部展开
EdgeAlpha
— 直方图条形边的透明度
1
(默认) | 范围 [0,1]
中的标量
直方图条形边界的透明度,指定为范围 [0,1]
内的标量值。值 1
表示完全不透明,0
则表示完全透明(不可见)。
示例:
创建一个具有半透明条形边的直方图。 histogram
(X,'EdgeAlpha',0.5)
输出参量
全部展开
h
— 直方图
对象
直方图,以对象的形式返回。有关详细信息,请参阅 Histogram 属性。
属性
Histogram 属性 | 直方图的外观和行为 |
对象函数
morebins | 增加直方图的 bin 数量 |
fewerbins | 减少直方图 bin 数量 |
示例
全部折叠
向量直方图
打开实时脚本
生成 10,000 个随机数并创建直方图。histogram
函数自动选择合适的 bin 数量,以便涵盖 x
中的值范围并显示基本分布的形状。
x = randn(10000,1);h = histogram(x)
h = Histogram with properties: Data: [10000x1 double] Values: [2 2 1 6 7 17 29 57 86 133 193 271 331 421 540 613 730 748 776 806 824 721 623 503 446 326 234 191 132 78 65 33 26 11 8 5 5] 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 -1.4000 -1.2000 -1 -0.8000 -0.6000 -0.4000 -0.2000 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000 2.2000 ... ] (1x38 double) BinWidth: 0.2000 BinLimits: [-3.8000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
指定 histogram
函数的输出参量时,它返回一个二元直方图对象。可以使用该对象检查直方图的属性,例如 bin 数量或宽度。
计算直方图的 bin 数量。
nbins = h.NumBins
nbins = 37
指定直方图的 bin 数量
打开实时脚本
对分类为 25 个等间距 bin 的 1,000 个随机数绘制直方图。
x = randn(1000,1);nbins = 25;h = histogram(x,nbins)
h = Histogram with properties: Data: [1000x1 double] Values: [1 3 0 6 14 19 31 54 74 80 92 122 104 115 88 80 38 32 21 9 5 5 5 0 2] NumBins: 25 BinEdges: [-3.4000 -3.1200 -2.8400 -2.5600 -2.2800 -2 -1.7200 -1.4400 -1.1600 -0.8800 -0.6000 -0.3200 -0.0400 0.2400 0.5200 0.8000 1.0800 1.3600 1.6400 1.9200 2.2000 2.4800 2.7600 3.0400 3.3200 3.6000] BinWidth: 0.2800 BinLimits: [-3.4000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
求 bin 计数。
counts = h.Values
counts = 1×25 1 3 0 6 14 19 31 54 74 80 92 122 104 115 88 80 38 32 21 9 5 5 5 0 2
更改直方图的 bin 数量
打开实时脚本
生成 1,000 个随机数并创建直方图。
X = randn(1000,1);h = histogram(X)
h = Histogram with properties: Data: [1000x1 double] Values: [3 1 2 15 17 27 53 79 85 101 127 110 124 95 67 32 27 16 6 6 4 1 2] NumBins: 23 BinEdges: [-3.3000 -3.0000 -2.7000 -2.4000 -2.1000 -1.8000 -1.5000 -1.2000 -0.9000 -0.6000 -0.3000 0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3 3.3000 3.6000] BinWidth: 0.3000 BinLimits: [-3.3000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
使用 morebins
函数粗略调整 bin 数量。
Nbins = morebins(h);Nbins = morebins(h)
Nbins = 29
通过显式设置 bin 数按精细颗粒级别调整 bin。
h.NumBins = 31;
指定直方图的 bin 边界
打开实时脚本
生成 1,000 个随机数并创建直方图。将 bin 边界指定为向量,使宽 bin 在直方图的两边,以捕获不满足 的离群值。第一个向量元素是第一个 bin 的左边界,而最后一个向量元素是最后一个 bin 的右边界。
x = randn(1000,1);edges = [-10 -2:0.25:2 10];h = histogram(x,edges);
将 Normalization
属性指定为 'countdensity'
以使包含离群值的 bin 扁平化。现在,每个 bin 的区域(而不是高度)表示该 bin 的观测值频率。
h.Normalization = 'countdensity';
绘制分类直方图
打开实时脚本
创建一个表示投票的分类向量。该向量中的类别是 'yes'
、'no'
或 'undecided'
。
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 no no yes yes yes no no no no undecided undecided yes no no no yes no yes no yes no no no yes yes yes yes
使用相对条形宽度 0.5
绘制投票的分类直方图。
h = histogram(C,'BarWidth',0.5)
h = Histogram with properties: Data: [no no yes yes yes no no no no undecided undecided yes no no no yes no yes no yes no no no yes yes yes yes] Values: [11 14 2] NumDisplayBins: 3 Categories: {'yes' 'no' 'undecided'} DisplayOrder: 'data' Normalization: 'count' DisplayStyle: 'bar' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
具有指定归一化的直方图
打开实时脚本
生成 1,000 个随机数并使用 'probability'
归一化创建直方图。
x = randn(1000,1);h = histogram(x,'Normalization','probability')
h = Histogram with properties: Data: [1000x1 double] Values: [0.0030 1.0000e-03 0.0020 0.0150 0.0170 0.0270 0.0530 0.0790 0.0850 0.1010 0.1270 0.1100 0.1240 0.0950 0.0670 0.0320 0.0270 0.0160 0.0060 0.0060 0.0040 1.0000e-03 0.0020] NumBins: 23 BinEdges: [-3.3000 -3.0000 -2.7000 -2.4000 -2.1000 -1.8000 -1.5000 -1.2000 -0.9000 -0.6000 -0.3000 0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3 3.3000 3.6000] BinWidth: 0.3000 BinLimits: [-3.3000 3.6000] Normalization: 'probability' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
计算条形高度的总和。通过该归一化,每个条形的高度等于在该 bin 间隔内选择观测值的概率,并且所有条形的高度总和为 1。
S = sum(h.Values)
S = 1
使用百分比的直方图
打开实时脚本
生成 100000 个遵循正态分布的随机数。使用标准差 15 和均值 100。
x = 100 + 15*randn(1e5,1);
绘制这些随机数的直方图。将 y 轴的刻度和标签设置为百分比。
edges = 55:15:145;histogram(x,edges,Normalization="percentage")ytickformat("percentage")
绘制多个直方图
打开实时脚本
生成两个随机数向量并在同一图窗中针对每个向量绘制对应的一个直方图。
x = randn(2000,1);y = 1 + randn(5000,1);h1 = histogram(x);hold onh2 = histogram(y);
由于直方图的示例大小和 bin 宽度不同,很难将它们进行比较。对这些直方图进行归一化,这样所有的条形高度相加的结果为 1 并使用统一的 bin 宽度。
h1.Normalization = 'probability';h1.BinWidth = 0.25;h2.Normalization = 'probability';h2.BinWidth = 0.25;
调整直方图属性
打开实时脚本
生成 1,000 个随机数并创建直方图。返回直方图对象以调整该直方图的属性,无需重新创建整个绘图。
x = randn(1000,1);h = histogram(x)
h = Histogram with properties: Data: [1000×1 double] Values: [3 1 2 15 17 27 53 79 85 101 127 110 124 95 67 32 27 16 6 6 4 1 2] NumBins: 23 BinEdges: [-3.3000 -3.0000 -2.7000 -2.4000 -2.1000 -1.8000 -1.5000 -1.2000 -0.9000 -0.6000 -0.3000 0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3 3.3000 3.6000] BinWidth: 0.3000 BinLimits: [-3.3000 3.6000] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Show all properties
准确指定要使用的 bin 数量。
h.NumBins = 15;
通过向量指定 bin 边界。向量中的第一个值是第一个 bin 的左边界。最后一个值是最后一个 bin 的右边界。
h.BinEdges = [-3:3];
更改直方图条形的颜色。
h.FaceColor = [0 0.5 0.5];h.EdgeColor = 'r';
确定基本概率分布
打开实时脚本
生成 5,000 个均值为 5、标准差为 2 的正态分布随机数。在 Normalization
设为 'pdf'
的情况下绘制直方图可生成概率密度函数的估计值。
x = 2*randn(5000,1) + 5;histogram(x,'Normalization','pdf')
在本示例中,已知正态分布数据的基本分布。但是,通过将它与已知的概率密度函数进行对比,可以使用 'pdf'
直方图确定该数据的基础概率分布。
均值为 、标准差为 以及方差为 的正态分布的概率密度函数是:
对于均值为 5、标准差为 2 的正态分布,叠加一个概率密度函数图。
hold ony = -5:0.1:15;mu = 5;sigma = 2;f = exp(-(y-mu).^2./(2*sigma^2))./(sigma*sqrt(2*pi));plot(y,f,'LineWidth',1.5)
保存并加载直方图对象
打开实时脚本
使用 savefig
函数保存 histogram
图窗。
histogram(randn(10));savefig('histogram.fig');close gcf
使用 openfig
重新将直方图加载到 MATLAB®。openfig
也返回图窗 h
的句柄。
h = openfig('histogram.fig');
使用 findobj
函数从图窗句柄中查找正确的对象句柄。这样,您可以继续处理用于生成图窗的原始直方图对象。
y = findobj(h,'type','histogram')
y = Histogram with properties: Data: [10x10 double] Values: [2 17 28 32 16 3 2] NumBins: 7 BinEdges: [-3 -2 -1 0 1 2 3 4] BinWidth: 1 BinLimits: [-3 4] Normalization: 'count' FaceColor: 'auto' EdgeColor: [0 0 0] Use GET to show all properties
提示
使用
histogram
创建的直方图在绘图编辑模式下提供上下文菜单,以允许在图窗窗口中进行交互式操作。例如,您可以使用上下文菜单以交互方式更改 bin 的数量、对齐多个直方图或更改显示顺序。当您向直方图添加数据提示时,它们会显示 bin 边界和 bin 计数。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
此函数支持 tall 数组,但存在以下限制:
不支持某些输入选项。允许使用的选项包括:
'BinWidth'
'BinLimits'
'Normalization'
'DisplayStyle'
'BinMethod'
-'auto'
和'scott'
是相同的 bin 方法。不支持'fd'
bin 方法。'EdgeAlpha'
'EdgeColor'
'FaceAlpha'
'FaceColor'
'LineStyle'
'LineWidth'
'Orientation'
此外,条形的最大数量存在上限。默认最大值为 100。
不支持
morebins
和fewerbins
方法。不支持编辑需要重新计算 bin 的直方图对象属性。
有关详细信息,请参阅 使用 tall 数组处理无法放入内存的数据。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
此函数接受 GPU 数组,但不在 GPU 上运行。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
此函数在分布式数组上运行,但在客户端 MATLAB 中执行。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2014b 中推出
全部展开
R2023b: 使用百分比进行归一化
通过将 Normalization
名称-值参量设置为 'percentage'
,可以在垂直轴上使用百分比创建直方图。
另请参阅
Histogram 属性 | histcounts | discretize | morebins | fewerbins | histcounts2 | histogram2 | kde
主题
- 对分类数据绘图
- 控制分类直方图的显示
- 替换不建议使用的 hist 和 histc 实例
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office