文档

替换不鼓励的历史和历史实例

旧的直方图功能(,histc

MATLAB的早期版本®使用histc作为创建直方图和计算直方图bin计数的主要方法。这些功能虽然适用于某些通用目的,但总体功能有限。的使用histc在新代码中是不鼓励的原因(包括其他):

  • 在使用要创建一个直方图,修改直方图的属性是困难的,需要重新计算整个直方图。

  • 的默认行为是使用10个箱子,这并不适合很多数据集。

  • 绘制标准化直方图需要手工计算。

  • histc没有一致的行为。

推荐直方图函数

柱状图,histcounts,离散化函数极大地提高了MATLAB中直方图创建和计算的能力,同时仍然促进了一致性和易用性。柱状图,histcounts,离散化为新代码推荐的直方图创建和计算函数。

特别值得注意的是下列变化改进histc

  • 柱状图可以返回直方图对象。可以使用该对象修改直方图的属性。

  • 这两个柱状图histcounts具有自动分类和规范化功能,内置几个常见选项。

  • histcounts主要的计算功能是什么柱状图.结果是这些函数具有一致的行为。

  • 离散化为确定每个元素的容器位置提供额外的选项和灵活性。

需要代码更新的差异

尽管有上述改进,但仍有几个重要的地方差异旧的和现在推荐的函数之间,这可能需要更新您的代码。这些表总结了函数之间的差异,并提供了更新代码的建议。

代码更新为

区别 旧的行为 新行为柱状图

输入矩阵

为输入矩阵的每一列创建直方图,并在同一图中并排绘制直方图。

= randn (100 2);嘘(A)

柱状图将输入矩阵作为一个单一的高向量,并创建一个单一的直方图。若要绘制多个直方图,请为每列数据创建不同的直方图对象。使用抓住命令绘制同一图中的直方图。

= randn (100 2);h1 = histogram(A(: 1),10) edges = h1. binedges;hold on h2 = histogram(A(:,2),edges)

上面的代码示例为每个直方图使用相同的箱边,但在某些情况下,最好设置BinWidth每个直方图都是相同的。此外,为了显示目的,设置FaceAlpha每个直方图的属性,因为这影响重叠条的透明度。

本规范

接受本中心作为第二输入。

柱状图接受本边缘作为第二输入。

将仓中心转换为仓边以供使用柱状图,请参阅转换仓中心到仓边

请注意

在垃圾箱使用的情况下是整数,例如嘘(三3),使用新的内置的分类方法柱状图为整数。

直方图(“BinLimits”,[3 3],“BinMethod”,“整数”)

输出参数

返回bin计数作为输出参数,并且可以选择返回bin中心作为第二个输出参数。

1 = randn (100);[N,中心]= hist(A)

柱状图返回直方图对象作为输出参数。对象包含许多感兴趣的属性(仓数、仓边等)。您可以通过更改其属性值来修改直方图的各个方面。有关更多信息,请参见柱状图

1 = randn (100);h =直方图(A);N = h.Values Edges = h.BinEdges

请注意

要计算箱数(不绘制直方图),请替换[N,中心]= hist(A)[N,边缘]= histcounts (A, nbins)

默认箱数

默认使用10个bins。

这两个柱状图histcounts默认使用自动分类算法。箱子的数量是由输入数据的大小和分布决定的。

1 = randn (100);直方图(A) histcounts (A)

本限制

使用最小和最大有限数据值来确定图中第一和最后一栏的左右边缘。分别包含在第一个和最后一个容器中。

如果BinLimits还没有定下来吗柱状图根据有限数据值的最小值和最大值使用合理的仓限,但不完全等于。柱状图忽略了值,除非其中一个容器边明确指定作为仓边。

再现…的结果嘘(A)对于有限数据(no值),使用10个容器并显式设置BinLimits到最小和最大数据值。

一个=兰迪(5100 1);直方图(10“BinLimits”,[min (A) max (A)])

代码更新为histc

区别 旧的行为histc 新行为histcounts
输入矩阵

histc计算每列输入数据的bin计数。对于大小的输入矩阵——- - - - - -n,histc返回容器计数大小的矩阵长度(边缘)——- - - - - -n

10 A = randn (100);边缘= 4:4;N = histc(边缘)

histcounts将输入矩阵视为一个单独的高向量,并计算整个矩阵的bin计数。

10 A = randn (100);边缘= 4:4;N = histcounts(边缘)

使用for循环计算每列上的仓位计数。

10 A = randn (100);nbins = 10;N = 0 (nbins, size(A,2));k = 1:尺寸(2)N (:, k) = histcounts ((:, k), nbins);结束

如果由于矩阵中有大量的列而造成性能问题,那么可以考虑继续使用histc对于列式bin计算。

最后一个容器中包含的值

histc包括一个元素(我)在最后一个箱子里(我)= =边缘(结束).输出,N,是一个向量长度(边缘)包含bin的元素计数。落在桶外的值不计算。

histcounts包括一个元素(我)在最后一个箱子里边(end-1) <= A(i) <=边(end).换句话说,histcounts合并最后两个箱子histc放进最后一个箱子里。输出,N,是一个向量长度(边缘)1包含bin的元素计数。如果指定容器边,则不在容器外的值不计算。否则,histcounts自动确定用于包含所有数据的合适的箱边。

一个= 1:4;[1 2 2.5 3] N = histcounts(A) N = histcounts(A,edges)

最后一个箱子histc主要用于计算整数。用来做这个整数计数histcounts,可以使用“整数”本方法:

N = histcounts(“BinMethod”,“整数”);
输出参数

histc返回bin计数作为输出参数,并且可以选择返回bin索引作为第二个输出参数。

1 = randn(15日);边缘= 4:4;[N,本]= histc (A,边缘)
  • 用于bin计数计算N = histc(边缘)[N,本]= histc (A,边缘),使用histcounts.的histcounts函数返回bin计数作为输出参数,并可选择返回bin边作为第二个输出,或返回bin索引作为第三个输出。

    1 = randn(15日);[N,边缘,本]= histcounts (A)
  • 用于容器放置的计算(~,本)= histc (A,边缘),使用离散化.的离散化函数提供了确定每个元素的容器位置的附加选项。

    1 = randn(15日);边缘= 4:4;本=离散化(边缘)

转换仓中心到仓边

函数接受bin中心,而柱状图函数接受bin边。要更新使用的代码柱状图,您可能需要将箱子中心转换为箱子边缘,以再现使用

例如,指定bin中心使用.这些箱子的宽度相同。

A = [-9 -6 -5 -2 0 1 3 3 4 7];中心= [-7.5 -2.5 2.5 7.5];嘘(中心)

要将仓中心转换为仓边,请计算中连续值之间的中点中心.这种方法再现了……的结果适用于均匀和非均匀的仓宽。

d = diff(中心)/ 2;边缘=[中心(1)- d(1)中心(1:end-1) + d,中心(结束)+ d(结束)];

函数包括落在每个容器右边缘的值(第一个容器包括两个边缘),然而柱状图包括落在每个容器左边缘的值(最后一个容器包括这两条边)。稍微移动箱子边以获得相同的箱子计数

边边(2:结束)=(2:结束)+ eps(边缘(2:结束)
边缘=1×5-10.0000 -5.0000 0.0000 5.0000 10.0000

现在,使用柱状图箱边。

直方图(边缘)

这个话题有用吗?