2016-10-01 4 views
-2

Diff conditions: как очистить динамические легенды в конце каждой итерации; как удалить установленные линейные линии в конце каждой итерации.Как получить динамическую легенду о линейном графике в цикле?

Я пытаюсь распространить этот ответ на поток Dynamic Legend (Updates in every recursion) на итерацию легенды на одном графике. Предложение для покрытия динамической легенды на одном линейном графике

close all; clear all; 

% Test data 
aSize=zeros(2,777); 
aSize=[[0, 0]' randi(3,2,777)]; % STDEV about 3 

x=0:1:180; 

hFig=figure; 

index=1; 
while (index<=7); 

    % origo left alone 
    aSize(:, index+1) = aSize(:, index+1) + index; % to have linearly increasing trend 

    sz=40; 
    legend('-DynamicLegend'); 
    h = scatter(aSize(1,1:index+1)', aSize(2,1:index+1)', sz, ... 
      'MarkerEdgeColor',[0 .5 .5],... 
      'MarkerFaceColor',[0 .7 .7],... 
      'LineWidth',1.5, ... 
      'DisplayName', sprintf('Data')); 
    xlabel('width'); ylabel('height'); 
    hold on; 

    % Optimum 
    x=0:1:max(aSize(1, 1:index+1)); 
    y = x; % assume uniform 
    grid on; 
    h1=plot(x,y, 'black', ... 
     'DisplayName', sprintf('Optimum')); 

    % Fit with R2 linear 
    x=aSize(1,1:index+1); 
    b1 = aSize(1,1:index+1)' \ aSize(2,1:index+1)'; 
    yCalc1 = b1 * aSize(1,1:index+1); 
    Rsq1 = 1 - sum((y(1:index+1) - yCalc1).^2)/sum((y(1:index+1) - mean(y(1:index+1))).^2) 

    % origo needed 
    x = [0 x]; 
    yCalc1 = [0 yCalc1]; 
    h2=plot(x(1:index+2)', yCalc1(1:index+2)', '--p', ... 
     'DisplayName', sprintf('Fit R2 = %d', Rsq1)); 

    drawnow; 

    index=index+1; 

end; 

Выход неудачными, где легенды просто добавляются

enter image description here

Matlab: 2016a
ОС: Debian 8.5 6 битную
Linux ядра: 4.6 оборотов
Оборудование: Asus Zenbook UX303UA

+1

Вы спрашиваете, как удалить ранее построенные данные в конце цикла? –

+1

Запишите 'hold off' перед концом цикла. Это делает то, что вы ищете? –

+1

Я удалил часть ответа из вашего вопроса. Вопросы должны содержать только вопрос. Я судил, что ваше добавление не добавило уже принятого вами ответа, поэтому в этом вопросе не было смысла. Если у вас есть что-то существенное для добавления, вы можете сделать это в новом ответе. –

ответ

1

Удалите эту строку legend('-DynamicLegend'); и напишите ее непосредственно перед линией drawnow и напишите hold off после этой строки. Таким образом, следующие строки будут в конце вашего цикла.

legend('-DynamicLegend'); 
drawnow; 
hold off 
index=index+1; 
Смежные вопросы