在Matlab中使用x轴上的计时器进行绘图 [英] plot in matlab with timer on x axis
问题描述
我有一个Matlab代码,可根据循环迭代绘制变量值.
I have a Matlab code which plots the variable value against the loop iterations.
仅在此示例中,我就将随机值视为变量值.
I have considered random values as variable value just for this example.
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];
替换为计时器?
我要拥有的只是针对时间(以秒为单位)绘制的数据,而不是针对循环迭代的数据.有人有什么主意吗?谢谢.
All I want to have is data plotted against the time(in seconds) instead of data vs loop iterations. Anyone have any idea ? Thanks.
推荐答案
您可以使用 toc
跟踪已过去的秒数. tic
启动计数器,所有对toc
的连续调用都返回自上一个tic
起经过的秒数.
You can use tic
and toc
to keep track of the seconds that have elapsed. tic
starts the counter and all successive calls to toc
return the seconds that have elapsed since the last 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循环,并预先分配所有变量,以提高性能.
As a side note, you could also write your loop as a for loop and pre-allocate all of your variables which will improve performance.
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
这篇关于在Matlab中使用x轴上的计时器进行绘图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!