Matlab中带约束的直方图绘制

Matlab中带约束的直方图绘制,matlab,plot,histogram,Matlab,Plot,Histogram,我想用以下输出绘制直方图: (a). number of bin (b). data in each bin (c). bin size for each bin (d). bin start & bin end for each bin 每个箱子必须至少有7个元件。我试过这样的东西 data = rand(100,1); n = hist(data); 10 8 12 12 10 3 10 12

我想用以下输出绘制直方图:

   (a). number of bin
   (b). data in each bin
   (c). bin size for each bin
   (d). bin start & bin end for each bin
每个箱子必须至少有7个元件。我试过这样的东西

  data = rand(100,1);
  n = hist(data);
  10     8    12    12    10     3    10    12    12    11
这将产生这样的结果

  data = rand(100,1);
  n = hist(data);
  10     8    12    12    10     3    10    12    12    11
当我试着

  n = hist(data,7);
我得到

&这正是我想要的,每个箱子中至少有7个元素同时,我也想谈谈(c)和(d)部分

因此,为了确保每个箱子中的元素数量正确,我尝试如下:

  data = rand(100,1);
  i = length(data);
  n = hist(data, i);
  min_number = 7;   % minimum no. in each bin
  for j = 1:length(n)
     if n(j) < min_number
      i = i-1;
      n = hist(data,i);
     end
  end
data=rand(100,1);
i=长度(数据);
n=历史(数据,i);
最小值=7;%每个箱子中的最小数量
对于j=1:长度(n)
如果n(j)

但是我犯了一些错误。谢谢您的帮助。

我认为基于您自己的代码可以做到这一点:

data = rand(100,1);
i = length(data);
n = hist(data, i);
min_number = 7;   % minimum no. in each bin
while any(n < min_number)
     i = i-1;
     [n bins] = hist(data,i);
end

figure
bar(bins,n)
(b) 。每个箱子中的数据

  • 如果你指的是每个箱子的计数数,那当然是由
    hist
    直接返回为
    n
  • 如果您的意思是,从每个数据条目指向其对应的bin的指针,我建议修改
    hist
    (制作一个副本作为您自己的个人版本),以返回
    histc
    中运行的
    histc
    的输出,或者在计算出直方图的边缘后调用
    histc
(c) 。每个箱子的箱子尺寸

binedges = [bins'-binsize/2 bins'+binsize/2]
hist
使用大小相同的箱子,因此

binsize = bins(2)-bins(1)
(d) 。每个料仓的料仓开始和料仓结束

binedges = [bins'-binsize/2 bins'+binsize/2]

我认为基于您自己的代码可以做到:

data = rand(100,1);
i = length(data);
n = hist(data, i);
min_number = 7;   % minimum no. in each bin
while any(n < min_number)
     i = i-1;
     [n bins] = hist(data,i);
end

figure
bar(bins,n)
(b) 。每个箱子中的数据

  • 如果你指的是每个箱子的计数数,那当然是由
    hist
    直接返回为
    n
  • 如果您的意思是,从每个数据条目指向其对应的bin的指针,我建议修改
    hist
    (制作一个副本作为您自己的个人版本),以返回
    histc
    中运行的
    histc
    的输出,或者在计算出直方图的边缘后调用
    histc
(c) 。每个箱子的箱子尺寸

binedges = [bins'-binsize/2 bins'+binsize/2]
hist
使用大小相同的箱子,因此

binsize = bins(2)-bins(1)
(d) 。每个料仓的料仓开始和料仓结束

binedges = [bins'-binsize/2 bins'+binsize/2]

Matlab的函数有什么问题?它有你所有的信息。是的,但我希望每个箱子里至少有7个元素。如果一个箱子中的元素数量少于7,则需要反复播放箱子的数量。所以,我想我必须在别的地方使用一些。你能澄清一下“但我犯了一些错误”吗?你收到错误信息了吗?如果是,请将其包括在问题中。如果代码没有达到您期望的效果,请描述一下。Matlab的函数有什么问题?它有你所有的信息。是的,但我希望每个箱子里至少有7个元素。如果一个箱子中的元素数量少于7,则需要反复播放箱子的数量。所以,我想我必须在别的地方使用一些。你能澄清一下“但我犯了一些错误”吗?你收到错误信息了吗?如果是,请将其包括在问题中。如果代码没有达到您期望的效果,请描述它。