计算2个变量的直方图

时间:2016-05-20 11:31:12

标签: matlab histogram

我有一个包含200步行速度的向量:

a = 50;
b = 100;
speed = (b-a).*rand(200,1) + a;

另一个矢量包含每次步行的步数:

a = 8;
b = 100;
steps = (b-a).*rand(200,1) + a;

我想创建一个直方图,在x轴上显示速度,在y轴上创建每个速度的步长之和。

我所做的是以下内容,但我想有更优雅的方法可以做到这一点:

unique_speed = unique(speed);
y_unique_speed  = zeros(size(unique_speed));
for i = 1 : numel(unique_speed)

    speed_idx = unique_speed(i);
    idx = speed==speed_idx ;
    y_unique_speed  (i) = sum(steps (idx));

end

2 个答案:

答案 0 :(得分:1)

首先,您需要对speed变量进行离散化处理。与其他答案不同,以下内容允许您选择任意步长,例如我选择1.5。请注意,最后一个bin边缘应该严格地大于最大数据点,因此我使用了max(speed)+binstep。然后,您可以使用histc确定每个对中的哪个bin,以及accumarray来确定每个bin中的步骤总数。最后,使用bar绘制。

binstep = 1.5;
binranges = (min(speed):binstep:max(speed)+binstep)';
[~, ind] = histc(speed, binranges);
bincounts = accumarray(ind, steps, size(binranges));
hFig = figure(); axh = axes('Parent', hFig); hold(axh, 'all'); grid(axh, 'on');
bar(axh, binranges, bincounts); axis(axh, 'tight');

enter image description here

答案 1 :(得分:0)

首先,将速度数据分类为离散值:

sspeed = ceil(speed);

然后为每个bin累积各种步长:

numsteps = accumarray(sspeed, steps);
plot(numsteps)