在matlab中生成一个循环内的图

时间:2012-02-23 19:35:54

标签: matlab loops plot

以下示例生成以下3个变量的子图(位于结构中):

    clear all 

Data.S1 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S2 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S3 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
% Data.S4 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
% Data.S5 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
% Data.S6 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));

a = fieldnames(Data);

cmap = hsv(length(a)); 

for i=1:length(fieldnames(Data));
    subplot(3,1,i)
    plot(Data.(a{i}).data1,'color',cmap(i,:));
end

我想知道,如果我要取消注释“数据”的最后三行,因此总共有6个变量,我将如何改变循环以生成所有数据的子图。请记住,每个图中的子图数量不应超过3(图表太小)。所以,从这个例子中我应该有2个数字窗口,每个窗口有3个子图。我正在考虑使用某种if语句,但是会对这个问题提出一些建议。

修订:

clear all 
Data.S1 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S2 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S3 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S4 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S5 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));
Data.S6 = struct('data1',rand(12,1),'data2',rand(12,1),'data3',rand(12,1));

a = fieldnames(Data);
figure(1)
for i=1:3;
    subplot(3,1,i);
    plot(Data.(a{i}).data1);
end
figure(2)
for i=1:3
    for ii=3:6;
        subplot(3,1,i);
        plot(Data.(a{ii}).data1);
    end
end

这是我需要的结果。

1 个答案:

答案 0 :(得分:2)

使用if(mod(i,3)==1) figure; end