Построение в цикле Matlab 'while' - PullRequest
0 голосов
/ 22 августа 2011

Почему я не могу отобразить данные на каждой итерации в одном и том же окне? Я пробовал с drawnow, но он не работает. Код:

t=0;
T=10;
i =1;

while t<T
. . .

time(i)=(i-1)*delta_t;

scrsz = get(0,'ScreenSize');

figure('position',[80 60 scrsz(3)-110 scrsz(4)-150]);

subplot(1,3,1);
plot(time(i),configurations(1,1,i),'-b','LineWidth',2), hold on;
drawnow;
xlabel('Time[s]');
ylabel('X [m]');

subplot(1,3,2);
plot(time(i),configurations(3,1,i),'-b','LineWidth',2), hold on;
drawnow;
xlabel('Time[s]');
ylabel('Z [m]');

subplot(1,3,3);
plot(time(i),configurations(2,2,i),'-b','LineWidth',2), hold on;
drawnow;
xlabel('Time[s]');
ylabel('\phi [deg]');

t=t+1;
i=i+1;

end

1 Ответ

2 голосов
/ 22 августа 2011

Это потому, что вы добавили figure('...') строку внутри while цикла. Таким образом, он открывает новое окно на каждой итерации. Переместите эту линию и линию scrsz=... и поместите ее чуть выше линии while t<T (то есть вне цикла).

Чтобы нанести изображение на несколько окон рисунка, используйте дескрипторы осей, например:

hFig1=figure(1);hAxes1=axes;
hFig2=figure(2);hAxes2=axes;

while ...
    ---
    plot(hAxes1,...)
    plot(hAxes2,...)
end

Однако каждый subplot создает свою ось. Поэтому, если вы хотите построить несколько вспомогательных участков в двух разных окнах внутри цикла, вам нужно будет установить их до цикла и затем вызвать вызов. то есть.,

hFig1=figure(1);
hAxes1Sub1=subplot(1,2,1);
hAxes1Sub2=subplot(1,2,2);

hFig2=figure(2);
hAxes2Sub1=subplot(1,2,1);
hAxes2Sub2=subplot(1,2,2);

while ...
    ---
    plot(hAxes1Sub1,...)
    plot(hAxes2Sub1,...)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...