Per risolvere il problema è sufficiente spostare l'istruzione
hold on all'interno del
ciclo for, eventualmente inserendola in un blocco "
if" in modo che venga eseguita una volta sola.
Il motivo di tale "strano" comportamento è spiegato nell'help di Matlab:
If you attempt to add a loglog, semilogx, or semilogy plot to a linear axis mode graph with hold on, the axis mode remains as it is and the new data plots as linear.
Inserendo l'istruzione "
hold on" prima dell'invocazione della funzione "
semilogx" l'"
axis mode" rimane settato come "
linear".
L'aggiunta della classica griglia dei grafici "logaritmici" è un po' più complicata, ma si può fare riferimento a quanto riportato in:
http://www.mathworks.com/matlabcentral/answers/143234-incomplete-minor-gridlines-in-semilogx-plot
Nello script in calce il grafico viene generato nelle due modalità ("
hold on" prima del loop ed all'interno del loop).
%
% Creazione dei valori delle ascisse
%
x = 0:0.1:10;
%
% Definizione dei colori da assegnare alle curve
%
l_col='rgbkc'
%
% Apertura della "finestra" per i grafici: la finestra conterrà due grafici
%
figure
%
% Grafico #1: l'istruzione "hold on" è inserita prima del loop che invoca
% la funzione "semilogx"
%
subplot(2,1,1)
hold on
for i=1:5
semilogx(10.^x,x*i,'color',l_col(i),'linewidth',2)
leg_1{i}=['i=' num2str(i)];
end
title('Hold on prima di "semilogx"')
legend(leg_1,'location','EastOutside');
grid on
%
% Grafico #2: l'istruzione "hold on" è inserita all'interno del loop che
% invoca la funzione "semilogx". Il flag "once" viene utilizzato per
% attivare l'istruzione "hold on" una volta sola
%
subplot(2,1,2)
once=1;
for i=1:5
semilogx(10.^x,x*i,'color',l_col(i),'linewidth',2)
if(once)
hold on
once=0;
end
end
title('Hold on nel Loop')
legend(leg_1,'location','EastOutside');
grid on
Hope this helps.
Allegati: