我正在用Matlab绘制1个图中2个分布的2个直方图。但是,结果显示2个直方图不具有相同的bin宽度,尽管我对bin使用相同的数字。我们如何使2个直方图具有相同的箱宽?
我的代码很简单:
a = distribution one
b = distribution two
nbins = number of bins
[c,d] = hist(a,nbins);
[e,f] = hist(b,nbins);
%Plotting
bar(d,c);hold on;
bar(f,e);hold off;
答案 0 :(得分:1)
这可以通过简单地使用从一个调用到hist的bin中心作为另一个的bin来实现
例如
[aCounts,aBins] = hist(a,nBins);
[bCounts,bBins] = hist(b,aBins);
请注意all(aBins==bBins)
= 1
当两个数据集的最小值和最大值不相似时,此方法会丢失信息*,一个简单的解决方案是根据组合数据创建容器
[~ , bins] = hist( [a(:),b(:)] ,nBins);
aCounts = hist( a , bins );
bCounts = hist( b , bins );
*如果范围差异很大,那么手动创建bin中心的向量可能会更好
(重新阅读问题后)如果您希望控制箱宽度不使用相同的箱子,那么手动创建箱子中心可能是最好的......
这样做会创建一个bin中心向量来传递给hist,
例如- 请注意,此处仅对一组数据强制执行二进制数
aBins = linspace( min(a(:)) ,max(a(:) , nBins);
binWidth = aBins(2)-aBins(1);
bBins = min(a):binWidth:max(b)+binWidth/2
然后使用
aCounts = hist( a , aBins );
bCounts = hist( b , bBins );
答案 1 :(得分:1)
使用带有' BinWidth'的histcounts选项
https://www.mathworks.com/help/matlab/ref/histcounts.html
即
data1 = randn(1000,1)*10;
data2 = randn(1000,1);
[hist1,~] = histcounts(data1, 'BinWidth', 10);
[hist2,~] = histcounts(data2, 'BinWidth', 10);
bar(hist1)
bar(hist2)
答案 2 :(得分:0)
当第二个参数是向量而不是标量时,hist
的行为是不同的。
不是指定多个分档,而是使用向量指定分箱限制,如documentation中所示(请参阅" 指定分区间隔"):
rng(0,'twister')
data1 = randn(1000,1)*10;
rng(1,'twister')
data2 = randn(1000,1);
figure
xvalues1 = -40:40;
[c,d] = hist(data1,xvalues1);
[e,f] = hist(data2,xvalues1);
%Plotting
bar(d,c,'b');hold on;
bar(f,e,'r');hold off;
这导致: