Deleting plot point by point
8 views (last 30 days)
Show older comments
Hello,
I want to simulate a heart beating graph (like on an ECG = electrocardiogram). For that I have the data for this plot and I want to animate the line, so it is appearing point by point and after the last point is plotted, it starts again (https://www.youtube.com/watch?v=XV11kplLoxw).
I have the code for the plot appearing in the graph (so "first" time it runs through), but then I do not know how to "delete" the line point by point from the beginning, so I can plot the graph again point by point.
My first try was to paint over the plotted line with a white one (and the same data), but it does not work perfectly ...
I hope the question is understandable, else please ask the missing points.
Thanks in advance.
Regards,
elchico
.
My code without the "deleting step":
filename = 'heartbeating_data.dat';% incl. extension
delimiter = '\t';
M_RTC = dlmread(filename,delimiter);
time = M_RTC(:,1);
data = M_RTC(:,2);
a1 = animatedline('Color','r', 'LineWidth',2);
title('Heartbeating')
xlabel('time / s')
ylabel('|Z| (norm., 4 kHz)')
axis([0 10 0.99 1.03])
x = time;
for k = 1:length(x);
% first line
xk = x(k,1);
y = data(k,1);
addpoints(a1,xk,y);
% update screen
drawnow %limitrate
pause(0.0005);
end
My code with the painting over:
filename = 'heartbeating_data.dat';
delimiter = '\t';
M_RTC = dlmread(filename,delimiter);
time = M_RTC(:,1);
data = M_RTC(:,2);
a1 = animatedline('Color','r', 'LineWidth',2);
a2 = animatedline('Color','w', 'LineWidth',10);
title('Heartbeating')
xlabel('time / s')
ylabel('|Z| (norm., 4 kHz)')
axis([0 10 0.99 1.03])
x = time;
for ii = 1:10
for k = 1:length(x);
% red line
xr = x(k,1);
yr = data(k,1);
addpoints(a1,xr,yr);
% white line
if k < (length(x)-9)
xw = x(k+9,1);
yw = data(k+9,1);
elseif k < length(x)
xw = x(length(x)-k,1);
yw = data(length(x)-k,1);
else
xw = 12;
yw = 12;
end
addpoints(a2,xw,yw);
% update screen
drawnow %limitrate
pause(0.0005);
end
end
0 Comments
Answers (1)
Antoine Bridet
on 19 Jun 2018
Instead of reading and plotting the points one by one using addpoints, you might want to consider storing the data in an array and replot the entire graph at each run of the loop. At the beginning, the array would fill up and it wouldn't change the behaviour of your program, and once you start replacing the values at the beginning of the array, replotting would mean that you get the result that you are after.
Short version: no need to 'delete' points if you replace them in an array.
I hope this will help you!
0 Comments
See Also
Categories
Find more on Animation 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!