创建一个正确的直方图

时间:2014-05-16 21:45:33

标签: matlab histogram

我在向量C中表示了一系列数据 并具有由向量R

表示的数据类
    C = [1.71974522292994
1.91974522292994
2.03821656050955
2.13375796178344
2.16560509554140
2.22929936305733
2.35668789808917
2.38853503184713
2.54777070063694
2.61146496815287
2.70700636942675
2.73885350318471
2.83439490445860
2.96178343949045
3.02547770700637
3.31210191082803]

    R = [1.71974522292994
2.03821104580359
2.35667686867724
2.67514269155088
2.99360851442453
3.31207433729818
3.63054016017183]

我需要做一个直方图和曲线来重叠标准法线

z = histc(C,R);   bar(R,z); 

但代表频率的矢量z不正确。

z = [2 4 4 4 1 1]'
excell上的

是如此,并且表示直方图

z = [1 1 4 4 4 1 1]'

您可以使用这两个向量建议解决方案吗? TNKS

2 个答案:

答案 0 :(得分:1)

这是因为Matlab对histc的定义:

  如果边(k)<= x(i)

而Excel可能使用更标准的

  

边缘(k)&lt; x(i)&lt; = edges(k + 1)

所以基本上你需要从下到上移动等号。你可以得到

  1. 通过改变两个向量的符号并翻转第二个(保持排序)的技巧:

    >> z = histc(-C,-R(end:-1:1))
    z =
         1
         1
         4
         4
         4
         1
         1
    
  2. 使用非常强大的bsxfun函数直接计算上面带有等号的直方图:

    z = diff(sum(bsxfun(@le, C(:), [-inf R(:).'])));
    

答案 1 :(得分:0)

我发现使用它很有帮助  z = histc(-C,-R);

我用于内部的循环包括具有不同长度的向量的矩阵。然后我用NaN

填充基质
C and classe = [30x14] created by vectors with different lengths + NaN
[nr,nc] = size(C);
Freq = NaN*ones(nr,nc);
R = NaN*ones(nr,nc);
CC = NaN*ones(nr,nc);

我没有办法用正确的子图创建正确数量的数字。 在每个图中必须有4个子图。

for k = 1:4
for j= 1 : nc;

    R = classe(:,j);
    CC = C(:,j);
    FF = Freq(:,j);

        R = R(~isnan(B)); % toglie i valori NaN
         CC = CC(~isnan(CC));

        R = sort(R,'descend'); 
        CC = sort(C,'descend');

剧情

FF = histc(-C,-R); % Calculate the J-th absolute frequencies

        figure(k); <===?????
         subplot(2,2,k) <=== ????????
        bar(B,FF);

重新组装矩阵

    if length(B)<nr
         R(length(R)+1:nr)=NaN; % riempie la parte di colonna vuota
      if length(CC)< nr;
           C(length(CC)+1:nr)=NaN;
        if length(FF)< nr;
            FF(length(FF)+1:nr)=NaN;

        end
      end
    end



     classe(:,j)=R(:); % matrice classe
           C(:,j)=CC(:) % matrice Elementi;
        Freq(:,j)=FF(:); %Matrice Frequenze Assolute

end

接下来的步骤涉及绘制3个数字。每个图包含4个子图 我也可以在每个直方图上叠加标准的正常曲线...... 小费?

TNKS