создание графиков в цикле в Matlab - PullRequest
0 голосов
/ 23 февраля 2012

В следующем примере создается подзаговор из трех переменных ниже (расположенных в структуре):

    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 Ответ

2 голосов
/ 23 февраля 2012

Использование if(mod(i,3)==1) figure; end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...