切断数据并在MATLAB中绘图

时间:2015-07-12 20:04:28

标签: matlab

我有一个包含2300个数据点的数据文件。数据在-0.1到0.1之间波动 我希望在它再次达到值0.1之前绘制部分图。例如: 如果第一个点是0.1然后绘制它直到它再次达到0.1然后停止.. 并再次做同样的事情。所以,到目前为止,我还没能实现这一目标。任何帮助将不胜感激。

以下是代码:

G_Data = load('sample3.txt');
time = G_Data(:,1);
Ax = G_Data(:,2);
Ay = G_Data(:,3);
Az = G_Data(:,4);

%% Data parsing
ind = find(Az< 0.1& Az>-0.1);
nAz = Az(ind);
ntime = time(ind);
figure
plot(ntime,nAz)

%plot(ntime(1:197),nAz(1:197))'

在这种情况下,我想要数字(197),因为这是第一次数据集达到代码所找到的约0.1的值。

这是当前的情节:

current

这是所需的情节:

desired

这是数据文件的链接 DataFileTest

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法(虽然可能不是计算效率最高的)是将数据分成不同的数组,如下所示:

%make a cell to hold your arrays
outarrays = {};

%initialise a sub-array counter
subarray = 1;

%loop over all datapoints
for datapoint = 1 : length (Az)
    outarrays{datapoint} = [];
    if Az(datapoint) < 0.1
        outarrays{subarray}[end+1] = Az(datapoint);
    else
        %move on to next sub-array
        subarray = subarray + 1;
    end
    datapoint = datapoint + 1;
end

然后使用

绘制第n个子阵列很简单
cumulative_time = 0;
for subarray = 1 : n - 1
    cumulative_time = cumulative_time + length(outarray{subarray});
end
plot(time(cumulative_time : cumulative_time + length(outarray{n})),outarray{n});

我知道它充满了在matlab中效率不高的循环,但只有几千点它应该在很短的时间内运行。请检查代码 - 我没有适当的数据来测试它。

希望这有用!