在继续使用Matlab之前,多次重新绘制相同的数据点

时间:2013-04-06 13:50:38

标签: matlab plot interpolation

如果我有以下代码:

for t=1:length(s)  % s is a struct with over 1000 entries
  if s(t).BOX==0
    a(t,:)=0;
    elseif s(t).BOX==1
    a(t,:)=100;
  end
  if s(t).BOX==2
    b(t,:)=150;
    elseif s(t).BOX==3
    b(t,:)=170;
  end
  .
  .
  .

end
plot(a)
plot(b)
plot(c)

我想要完成的事情:

for n=1:length(s)

Plot the data point of a(n) at t=0, t=1, t=2
then
Plot the data point of b(n) at t=3, t=4, t=5
.
.
.
etc

基本上,在移动到下一个点之前,每个数据点将被绘制为t的3个值。

我怎样才能做到这一点?

修改

这样的事情:

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我正确理解你,并假设a是一个向量,你可以做类似的事情

% Your for loop comes before this

nVarsToPlot = 4;
nRepeatsPerPoint = 3;
t = repmat(linspace(1, nRepeatsPerPoint * length(s), nRepeatsPerPoint * length(s))', 1, nVarsToPlot);
genMat = @(x)repmat(x(:)', nRepeatsPerPoint, 1);
aMat = genMat(a); bMat = genMat(b); cMat = genMat(c); dMat = genMat(d);
abcPlot = [aMat(:) bMat(:) cMat(:) dMat(:)];
plot(t, abcPlot);

我有点不清楚你希望t包含哪些值,但你基本上需要一个长度为s 3倍的向量。然后,您可以通过复制[Nx1]向量(a, b, c, etc.)三次(将它们转换为行向量)并将整个批次堆叠到矩阵中,然后将其转换为带有向量的向量来生成正确的数据矩阵只要矩阵构造正确,(:)就应该以正确的顺序出现。