Matlab 计算2个变量的直方图
我有一个包含200次行走速度的向量: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
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
值不太可能相等。它们在您的实际代码中是以相同的方式生成的吗?不,我有真实的数据……类似于?