在 x 轴上用计时器在 matlab 中绘图

plot in matlab with timer on x axis

我有一个 Matlab 代码,它根据循环迭代绘制变量值。

为了这个例子,我将随机值视为变量值。

function varargout = myplot(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @myplot_OpeningFcn, ...
                   'gui_OutputFcn',  @myplot_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before myplot is made visible.
function myplot_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;
% Update handles structure
guidata(hObject, handles);


function varargout = myplot_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1);
iif = 0;
i = 1;
y = 0;
while (i < 1000)
    yf = rand(1);
    y = [y, yf];
    iif = [i,iif];
    i = i + 1;
    plot(iif,y);
    pause(0.001);
end

如何将 iif = [i,iif]; 替换为计时器?

我想要的只是根据时间(以秒为单位)绘制数据而不是数据与循环迭代。有人知道吗?谢谢

您可以使用 tic and toc 来记录流逝的秒数。 tic 启动计数器和对 toc return 的所有连续调用自上次 tic.

以来经过的秒数
iif = 0;
i = 1;
y = 0;

hplot = plot(iif, y);
xlabel('Elapsed Time (s)')
ylabel('Value')

% Force a graphics refresh so that isn't counted in our elapsed time
drawnow

% Start the timer
tic

while (i < 1000)
    yf = rand(1);
    y = cat(2, y, yf);

    % Call toc to get the current elapsed time
    iif = cat(2, iif, toc);

    i = i + 1;

    set(hplot, 'xdata', iif, 'ydata', y);
    pause(0.001)
end

附带说明一下,您还可以将循环编写为 for 循环并预先分配所有变量,这将提高性能。

nIterations = 1000;
iif = nan(nIterations, 1);
y = nan(nIterations, 1);

hplot = plot(iif, y);

tic

for k = 1:nIterations
    y(k) = rand(1);
    iif(k) = toc;

    set(hplot, 'XData', iif, 'YData', y)
    pause(0.001)
end