在Matlab中使用x轴上的计时器进行绘图 [英] plot in matlab with timer on x axis

查看:146
本文介绍了在Matlab中使用x轴上的计时器进行绘图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆