我有一个包含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
答案 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');
答案 1 :(得分:0)
首先,将速度数据分类为离散值:
sspeed = ceil(speed);
然后为每个bin累积各种步长:
numsteps = accumarray(sspeed, steps);
plot(numsteps)