Histogram - 直方图 - MATLAB (2024)

本页翻译不是最新的。点击此处可查看最新英文版本。

直方图

全页展开

  • Histogram - 直方图 - MATLAB (1)

Histogram - 直方图 - MATLAB (2)

说明

直方图是一种条形图,它将数据分组为 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 属性

示例

输入参量

全部展开

要分布到各 bin 的数据,指定为向量、矩阵或多维数组。histogram 将矩阵和多维数组数据视为单个列向量 X(:),并绘制单个直方图。

histogram 忽略所有 NaNNaT 值。同样,histogram 忽略 Inf-Inf 值,除非 bin 边界将 Inf-Inf 显式指定为 bin 边界。虽然 NaNNaTInf-Inf 值通常情况下不会绘制,但在包括所有数据元素的归一化计算(如 'probability')中,仍然会包含这些值。

注意

如果 X 包含类型为 int64uint64 且大于 flintmax 的整数,则建议您显式指定直方图 bin 边界。histogram 会自动使用双精度对输入数据进行分 bin,这些数据缺少大于 flintmax 的数字的整数精度。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

分类数据,指定为分类数组。histogram 不会绘制未定义的分类值。但在包括所有数据元素的归一化计算(如 'probability')中,仍然会包含未定义的分类值。

数据类型: categorical

bin 数量,指定为正整数。如果未指定 nbins,则 histogram 根据 X 中的值确定 bin 的数量。

如果用 BinMethodBinWidthBinEdges 指定 nbins,则 histogram 仅采用最后一个参数。

示例: histogram(X,15) 创建一个带 15 个 bin 的直方图。

bin 边界,指定为向量。edges(1) 是第一个 bin 的左边界,edges(end) 是最后一个 bin 的右边界。

每个 bin 都包含左边界,但不包含右边界,除了同时包含两个边界的最后一个 bin 外。

对于 datetimeduration 数据,edges 必须为单调递增顺序的 datetimeduration 向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

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])

目标坐标区,指定为 Axes 对象或 PolarAxes 对象。如果您不指定坐标区而且当前坐标区是笛卡尔坐标区,histogram 函数将使用当前坐标区 (gca)。要在极坐标区上绘图,请指定 PolarAxes 对象作为第一个输入参量,或者使用 polarhistogram 函数。

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

示例: histogram(X,BinWidth=5)

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: histogram(X,'BinWidth',5)

注意

此处所列的属性只是一部分。有关完整列表,请参阅 Histogram 属性

类别

全部展开

数据

全部展开

颜色和样式

全部展开

直方图条形边界的透明度,指定为范围 [0,1] 内的标量值。值 1 表示完全不透明,0 则表示完全透明(不可见)。

示例: histogram(X,'EdgeAlpha',0.5) 创建一个具有半透明条形边的直方图。

输出参量

全部展开

直方图,以对象的形式返回。有关详细信息,请参阅 Histogram 属性

属性

Histogram 属性直方图的外观和行为

对象函数

morebins增加直方图的 bin 数量
fewerbins减少直方图 bin 数量

示例

全部折叠

向量直方图

打开实时脚本

生成 10,000 个随机数并创建直方图。histogram 函数自动选择合适的 bin 数量,以便涵盖 x 中的值范围并显示基本分布的形状。

x = randn(10000,1);h = histogram(x)

Histogram - 直方图 - MATLAB (3)

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)

Histogram - 直方图 - MATLAB (4)

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)

Histogram - 直方图 - MATLAB (5)

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)

Histogram - 直方图 - MATLAB (6)

Nbins = 29

通过显式设置 bin 数按精细颗粒级别调整 bin。

h.NumBins = 31;

Histogram - 直方图 - MATLAB (7)

指定直方图的 bin 边界

打开实时脚本

生成 1,000 个随机数并创建直方图。将 bin 边界指定为向量,使宽 bin 在直方图的两边,以捕获不满足 |x|<2 的离群值。第一个向量元素是第一个 bin 的左边界,而最后一个向量元素是最后一个 bin 的右边界。

x = randn(1000,1);edges = [-10 -2:0.25:2 10];h = histogram(x,edges);

Histogram - 直方图 - MATLAB (8)

Normalization 属性指定为 'countdensity' 以使包含离群值的 bin 扁平化。现在,每个 bin 的区域(而不是高度)表示该 bin 的观测值频率。

h.Normalization = 'countdensity';

Histogram - 直方图 - MATLAB (9)

绘制分类直方图

打开实时脚本

创建一个表示投票的分类向量。该向量中的类别是 '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)

Histogram - 直方图 - MATLAB (10)

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')

Histogram - 直方图 - MATLAB (11)

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")

Histogram - 直方图 - MATLAB (12)

绘制多个直方图

打开实时脚本

生成两个随机数向量并在同一图窗中针对每个向量绘制对应的一个直方图。

x = randn(2000,1);y = 1 + randn(5000,1);h1 = histogram(x);hold onh2 = histogram(y);

Histogram - 直方图 - MATLAB (13)

由于直方图的示例大小和 bin 宽度不同,很难将它们进行比较。对这些直方图进行归一化,这样所有的条形高度相加的结果为 1 并使用统一的 bin 宽度。

h1.Normalization = 'probability';h1.BinWidth = 0.25;h2.Normalization = 'probability';h2.BinWidth = 0.25;

Histogram - 直方图 - MATLAB (14)

调整直方图属性

打开实时脚本

生成 1,000 个随机数并创建直方图。返回直方图对象以调整该直方图的属性,无需重新创建整个绘图。

x = randn(1000,1);h = histogram(x)

Histogram - 直方图 - MATLAB (15)

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;

Histogram - 直方图 - MATLAB (16)

通过向量指定 bin 边界。向量中的第一个值是第一个 bin 的左边界。最后一个值是最后一个 bin 的右边界。

h.BinEdges = [-3:3];

Histogram - 直方图 - MATLAB (17)

更改直方图条形的颜色。

h.FaceColor = [0 0.5 0.5];h.EdgeColor = 'r';

Histogram - 直方图 - MATLAB (18)

确定基本概率分布

打开实时脚本

生成 5,000 个均值为 5、标准差为 2 的正态分布随机数。在 Normalization 设为 'pdf' 的情况下绘制直方图可生成概率密度函数的估计值。

x = 2*randn(5000,1) + 5;histogram(x,'Normalization','pdf')

Histogram - 直方图 - MATLAB (19)

在本示例中,已知正态分布数据的基本分布。但是,通过将它与已知的概率密度函数进行对比,可以使用 'pdf' 直方图确定该数据的基础概率分布。

均值为 μ、标准差为 σ 以及方差为 σ2 的正态分布的概率密度函数是:

f(x,μ,σ)=1σ2πexp[-(x-μ)22σ2].

对于均值为 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)

Histogram - 直方图 - MATLAB (20)

保存并加载直方图对象

打开实时脚本

使用 savefig 函数保存 histogram 图窗。

histogram(randn(10));savefig('histogram.fig');close gcf

使用 openfig 重新将直方图加载到 MATLAB®。openfig 也返回图窗 h 的句柄。

h = openfig('histogram.fig');

Histogram - 直方图 - MATLAB (21)

使用 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 计数。

扩展功能

版本历史记录

在 R2014b 中推出

全部展开

通过将 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.

Histogram - 直方图 - MATLAB (22)

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)

Asia Pacific

  • Australia (English)
  • India (English)
  • New Zealand (English)
  • 中国
  • 日本 (日本語)
  • 한국 (한국어)

Contact your local office

Histogram - 直方图 - MATLAB (2024)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Catherine Tremblay

Last Updated:

Views: 5439

Rating: 4.7 / 5 (67 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Catherine Tremblay

Birthday: 1999-09-23

Address: Suite 461 73643 Sherril Loaf, Dickinsonland, AZ 47941-2379

Phone: +2678139151039

Job: International Administration Supervisor

Hobby: Dowsing, Snowboarding, Rowing, Beekeeping, Calligraphy, Shooting, Air sports

Introduction: My name is Catherine Tremblay, I am a precious, perfect, tasty, enthusiastic, inexpensive, vast, kind person who loves writing and wants to share my knowledge and understanding with you.