HOW TO OVERWRITTE PLOTS IN A FOR LOOP

5 views (last 30 days)
carlos santiyan esteban
carlos santiyan esteban on 14 Jul 2021
Answered: Rishik Ramena on 19 Jul 2021
I want to overwritte plots coming from other files in a FOR loopm, in order so that each plot generated is held and the next one in the loop is also in drawn in the plot. I also want that the legend changes for every loop. I write the code:
% calculates the acceleration of a vehicle using the two codes:
vehicle_2021_v_p
electric_drive_2021
close all
%wm: motor speed [rad/s]
wm=n*2*pi/60;
for i= 1: length (rt)
%v_m: vehicle speed using speed discretization of motor [m/s]
v_m=wm/rt(i)*rw;
%f_m: tractive effort(i) using the speed discretization of the motor [N]
f_m=t*rt(i)/rw;
%ft: tractive effort(i) using vehicle speed discretization step dv [N]
ft=interp1(v_m,f_m,v);
hold on
figure
subplot(2,1,1)
plot(vkph,ft, vkph, fl, 'linewidth',2)
grid
xlabel ('vehicle speed [km/h]')
ylabel ('[N]')
title ('FORCE')
legend ('TRACTIVE EFFORT','LOAD')
subplot(2,1,2)
plot(vkph,ft.*v/1000, vkph, fl.*v/1000, 'linewidth',2)
grid
xlabel ('vehicle speed [km/h]')
ylabel ('[kW]')
title ('POWER')
legend ('TRACTIVE EFFORT','LOAD')
%tl_v: load torque using vehicle speed sampling [Nm]
tl_v=fl*rw/rt(i);
%n_v: motor speed using vehicle speed sampling [rpm]
n_v=v/rw*rt(i)*60/2/pi;
%tl: load torque using motor speed sampling [Nm]
tl=interp1(n_v,tl_v,n);
figure
subplot(2,1,1)
plot(n(:,i),t(:,i), n(:,i), tl(:,i), 'linewidth',2)
grid
xlabel ('motor speed [rpm]')
ylabel ('[Nm]')
title ('TORQUE')
legend ('MOTOR','LOAD')
subplot(2,1,2)
plot(n,p/1000, n, tl.*n*2*pi/60/1000, 'linewidth',2)
grid
xlabel ('motor speed [rpm]')
ylabel ('[kW]')
title ('POWER')
legend ('MOTOR','LOAD')
%% ACCELERATION CALCULATION %%%
%facc: acceleration force [N]
facc=ft-fl;
%i_pos_acc: indexes of positive acceleration
i_pos_acc=find(facc>0);
%i_max_speed: index of maximum speed
i_max_speed=length(i_pos_acc);
%v_max: top speed [km/h]
v_max =v(i_max_speed)*3.6
%acc: acceleration [m/s^2]
acc=facc(i_pos_acc)/mg;
%max_acc: maximum accelration [m/s^2]
max_acc=max(acc);
%g_max: maximum accelration [g]
g_max=max_acc/9.81;
%acc=dv/dt
%dt: vector of delta time for each dv [s]
dt=dv./acc;
%time: acceleration time [s]
time=cumsum(dt);
%d_dst: delta distance [m]
d_dst=v(i_pos_acc).*dt;
%distance: total distance [m]
distance=cumsum(d_dst);
figure(i)
subplot(3,1,1)
plot(time, acc, 'linewidth',2)
grid
xlim([0 200])
title('ACCELERATION')
xlabel ('time [s]')
ylabel ('[m/s^2]')
subplot(3,1, 2)
plot(time, v(i_pos_acc)*3.6, 'linewidth',2)
grid
xlim([0 200])
title('SPEED')
xlabel ('time [s]')
ylabel ('[km/h]')
subplot(3,1, 3)
plot(time, distance, 'linewidth',2)
grid
xlim([0 200])
title('DISTANCE')
xlabel ('time [s]')
ylabel ('[m]')
end

Answers (1)

Rishik Ramena
Rishik Ramena on 19 Jul 2021
Since you want to update the plot keeping the old data intact, add a pause after the plot and 'hold on' after the first plot. a sample code is provided for your reference.
figure; title('Plot loops');
A = rand(1,10);
B = rand(1,10);
N = length(A);
for idx=1:N
plot(A(1:idx),B(1:idx), '*-');
legend(['test' int2str(idx)]);
hold on
pause(2)
end
hold off

Categories

Find more on Line Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by