Deleting plot point by point

조회 수: 8 (최근 30일)
elchico
elchico 2018년 6월 19일
답변: Antoine Bridet 2018년 6월 19일
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

답변 (1개)

Antoine Bridet
Antoine Bridet 2018년 6월 19일
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!

카테고리

Help CenterFile Exchange에서 Animation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by