Filter löschen
Filter löschen

Plotting a variable against loop iteration

1 Ansicht (letzte 30 Tage)
Alla
Alla am 17 Aug. 2017
Kommentiert: Alla am 18 Aug. 2017
I have a variable changing within a loop and I want to plot it against the loop's iteration in real time, sounds simple enough but I just can't get it to work, I get an empty plot with the Y axis changing without having anything plotted.
for i=900:1:nfiles
%%Code that generates variable (Y) here %%
x = linspace(0,nfiles);
plot(x,Y,'LineWidth',2,...
'MarkerEdgeColor','b',...
'MarkerFaceColor','b',...
'MarkerSize',10);
drawnow
end
  2 Kommentare
Stephen23
Stephen23 am 17 Aug. 2017
Bearbeitet: Stephen23 am 17 Aug. 2017
How many values of Y are calculated on each iteration? By this description "...the Y axis changing without having anything plotted" it sounds like you are plotting one point at a time.
In any case, the best solution will be to store all of the data in one array and then plot it after the loop.
Alla
Alla am 18 Aug. 2017
That would definitely work, but what I need is to plot the results in real time.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Robert U
Robert U am 18 Aug. 2017
Hi Alaa MAZOUZ,
The marker-property of plot is by default 'none'. Choose a marker.
x is - according to the presented example - not dependent on i, thus, you do not calculate it repeatedly in every loop.
I like it better to open one parent figure which can be modified and draw the results into it. That might be useful for you, too. You might want to fix the limits of your axes to see Y moving in a fixed frame instead of seeing the frame moving for a quite fixed point (cloud).
x = linspace(0,nfiles);
ah = axes; % open parent figure
for i=900:1:nfiles
%%Code that generates variable (Y) here %%
plot(ah,x,Y,'LineWidth',2,...
'Marker','.',... % set marker to filled point
'MarkerEdgeColor','b',...
'MarkerFaceColor','b',...
'MarkerSize',10);
drawnow
end
Kind regards,
Robert
  2 Kommentare
Robert U
Robert U am 18 Aug. 2017
Example for a point drawing a circle:
clear
ah = axes;
for i = 0:360
x(i+1) = sind(i);
Y(i+1) = cosd(i);
plot(ah,x(1:end-1),Y(1:end-1),...
'LineWidth',1);
hold on
plot(ah,x(end),Y(end),...
'LineWidth',2,...
'Marker','.',...
'MarkerEdgeColor','r',...
'MarkerFaceColor','r',...
'MarkerSize',24);
axis equal
ah.XLimMode = 'manual';
ah.XLim = [-1 1];
ah.YLimMode = 'manual';
ah.YLim = [-1 1];
hold off
drawnow;
end
Alla
Alla am 18 Aug. 2017
Bearbeitet: Alla am 18 Aug. 2017
Thank you Robert that was quite helpful, I have managed to make it work but only after I had one other figure that displays other results within the loop omitted, basically when the code switched between the two figures mid loop the plot does not hold on to the plotted points and restarts each time giving me dots,to work around this I have tried to have all of the results displayed in one figure and avoid the switching all together I but couldn't manage that either.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Graphics Performance finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by