Matlab 计算2个变量的直方图

Matlab 计算2个变量的直方图,matlab,histogram,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(siz

我有一个包含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

首先,将速度数据存储为离散值:

sspeed = ceil(speed);
然后将各种步长累积到每个存储箱:

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

首先,您需要离散化
速度
变量。与其他答案不同,以下选项允许您选择任意步长,例如我选择了
1.5
。请注意,最后一个箱子边缘应该严格大于最大数据点,因此我使用了
max(speed)+binstep
。然后,您可以使用
histc
来确定每一对的存储单元,并使用
accumarray
来确定每个存储单元中的步骤总数。最后,使用
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');

根据此处给出的代码,2
speed
值不太可能相等。它们在您的实际代码中是以相同的方式生成的吗?不,我有真实的数据……类似于?