如果我有以下代码:
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个值。
我怎样才能做到这一点?
修改
这样的事情:
答案 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.
)三次(将它们转换为行向量)并将整个批次堆叠到矩阵中,然后将其转换为带有向量的向量来生成正确的数据矩阵只要矩阵构造正确,(:)
就应该以正确的顺序出现。