Plotting graph using for loop in MATLAB

后端 未结 2 1426
广开言路
广开言路 2020-12-07 03:29

I\'m trying to plot a simple graph using for loop as shown below

x=linspace(0,2*pi,100);
for i=1:numel(x)
    y=sin(x(i));
    plot(x(i),y)
    hold on
end
<         


        
2条回答
  •  孤街浪徒
    2020-12-07 04:04

    Simple approach

    If you want to draw a curve as you add data, try the following:

    x = linspace(0,2 * pi, 100);
    y = zeros(size(x));
    for i=1:numel(x)
         y(i) = sin(x(i));
         plot(x(1:i), y(1:i), 'color', 'r')
         drawnow();
    end
    

    Be aware that the plot automatically tries to set x and y limits (curve is scaled to the plot window), to prevent that you have to manually set the x- and y-limits with xlimand ylim.

    As Matt wrote in his answer, calling plot in each iteration is quite expensive (i.e. time consuming). Therefore I suggest using datasources:

    Update graph using data sources

    % Create a panel and axes object
    h_panel = uipanel;
    h_axes = axes( 'Parent', h_panel);
    
    % Create data sources
    x = linspace(0,2 * pi, 100);
    y = zeros(size(x));
    
    % Create graph object, in this case stairs 
    % and bind the variables x and y as its data sources
    h_stairs = stairs(h_axes, x, y, 'XDataSource', 'x', 'YDataSource', 'y');
    
    for i=1:size(x)
        y(i) = sin(x(i));
        % Update the data of the stairs graph
        refreshdata(h_stairs); 
        drawnow();
    end
    

    The call to drawnow isn't neccessary in each iteration, it is only used to update the visuals, so you can see the changes directly.

提交回复
热议问题