我在向量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
答案 0 :(得分:1)
这是因为Matlab对histc
的定义:
如果边(k)<= x(i)
而Excel可能使用更标准的
边缘(k)&lt; x(i)&lt; = edges(k + 1)
所以基本上你需要从下到上移动等号。你可以得到
通过改变两个向量的符号并翻转第二个(保持排序)的技巧:
>> z = histc(-C,-R(end:-1:1))
z =
1
1
4
4
4
1
1
使用非常强大的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