matlab统计三组数据落在指定区间范围的频数,并绘制成分组频数直方图代码
时间: 2024-05-12 14:13:27 浏览: 17
以下是一个示例代码,其中数据存储在三个向量中,分别为 x、y 和 z。代码使用 `histogram` 函数绘制直方图,使用 `filter` 函数计算位于指定区间范围内的频数。
```matlab
% 创建数据
x = randn(1000,1);
y = randn(1000,1) + 1;
z = randn(1000,1) - 1;
% 计算每个向量中落在区间[-1,1]的数据点数
x_count = sum(filter([-1 1], 1, x) > 0);
y_count = sum(filter([-1 1], 1, y) > 0);
z_count = sum(filter([-1 1], 1, z) > 0);
% 绘制分组频数直方图
figure;
histogram([x;y;z],'BinWidth',0.2,'BinLimits',[-4 4],'Normalization','count');
hold on;
plot([-1 -1],[0 max([x_count y_count z_count])],'r--','LineWidth',2);
plot([1 1],[0 max([x_count y_count z_count])],'r--','LineWidth',2);
text(0, max([x_count y_count z_count])+5, sprintf('Counts: %d, %d, %d', x_count, y_count, z_count), 'HorizontalAlignment', 'center');
xlabel('Value');
ylabel('Frequency');
title('Grouped Frequency Histogram');
```
这段代码将生成一个分组频数直方图,其中红色虚线表示指定区间范围 [-1,1],文本框中显示了每个向量中落在该范围内的数据点数。
注意,`filter` 函数的参数 `[-1 1]` 表示计算差分,即用后一个元素减去前一个元素。因此,`filter([-1 1], 1, x)` 返回一个长度为 999 的向量,其中第 i 个元素等于 x(i+1)-x(i)。通过将结果与 0 进行比较,可以得到一个逻辑向量,其中 1 表示对应元素大于 0,即 x(i+1)>x(i)。这些 1 的数量即为落在指定区间范围内的数据点数。