matlab 坐标图动画,动态显示数据

数据采集或者数据回放时,用matlab的plot画图的话一般都是静态的,一下画完了就不动了。但是有些时候,比如实时的数据采集然后通过串口或pci在matlab中画出数据的变化图并同步动态显示,以及在一些想用matlab绘图回放大块的数据模拟随时间变化的情景。这时候就需要用到坐标图的动画显示了。这个功能实现起来有多种方法,只介绍一种最简单也是matlab中推荐使用的。

此功能的实现依赖animatedline对象,配合drawnow函数使用,具体使用可看帮助,以下也简单介绍下,都是搬运的帮助文档。

1:基本实现

h = animateline;axis([0,4*pi,-1,1])x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow
end

如果有另一个函数想从当前图形中获得数据,用animateline的getpoints方法

[xdata,ydata] = getpoints(h);

2:如果想实现贪吃蛇那样的效果,动态的图像中只显示一部分,而不是每次都从头就开始显示,可以设置画图的最大点数,通过设置MaximumNumPoints这个属性的值来实现

h = animatedline(‘MaximumNumPoints‘,100);
axis([0,4*pi,-1,1])

x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow
end

3:加快刷新的技巧,以上每次循环中都只向结构体中增加一个点,实时显示的话有可能刷新速度跟不上,所以可以考虑一次循环中向里面添加多个点,这样就可以加快刷新了

h = animatedline;
axis([0,4*pi,-1,1])

numpoints = 100000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
for k = 1:100:numpoints-100
    xvec = x(k:k+99);
    yvec = y(k:k+99);
    addpoints(h,xvec,yvec)
    drawnow
end

4:也可以用drawnow update加快动画速度

h = animatedline;
axis([0,4*pi,-1,1])

numpoints = 100000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
for k = 1:numpoints
    addpoints(h,x(k),y(k))
    drawnow update
end

5:控制动画的速度,有时候,希望动画显示的慢一点,上面介绍的都是加快动画的,如果要想控制动画速度,可以配合tic函数与toc函数,相当于一个记录程序运行的秒表,调用tic表示按一下开始计时,调用toc表示按一下结束及时,两个之间的时间差就是这一段程序运行的时间,下面这段代码表示控制帧速度在30

h = animatedline;
axis([0,4*pi,-1,1])
numpoints = 10000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
a = tic; % start timer
for k = 1:numpoints
    addpoints(h,x(k),y(k))
    b = toc(a); % check timer
    if b > (1/30)
        drawnow % update screen every 1/30 seconds
        a = tic; % reset timer after updating
    end
end
drawnow % draw final frame

 其它的还有一些细节的属性,比如设置线条属性等,具体可看看帮助文档

 

  

  

  

时间: 2024-08-29 15:48:03

matlab 坐标图动画,动态显示数据的相关文章

Android 依据EditText搜索框ListView动态显示数据

依据EditText搜索框ListView动态显示数据是依据需求来的,认为这之中涉及的东西可能比較的有意思,所以动手来写一写.希望对大家有点帮助. 首先.我们来分析下整个过程: 1.建立一个layout,包括一个EditText搜索框和一个ListView 2.创建一个数据集mData,用于ListView的Adapter的创建 3.加入EditText的文本改变的监听器 4.利用notifyDataSetChanged()动态更新ListView 第一步:创建一个搜索框 这个还是比較easy的

matlab结构体形式保存数据生成.mat文件< 转>

2015年 参加天池大数据竞赛 为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVXsjQvh8ARcx  访问密码 30a3 该工具包导入的数据格式就是我如下所说的封装方式,因此,在使用该算法包时,需要把自己的数据进行封装一下. 通过matlab打开,可以知道twonorm.mat里面还封装了两个.mat文件. 我们看看工具包的作者给的tutorial 部分源码如下: 的源码如下: 说明

Android 根据EditText搜索框ListView动态显示数据

根据EditText搜索框ListView动态显示数据是根据需求来的,觉得这之中涉及的东西可能比较的有意思,所以动手来写一写,希望对大家有点帮助. 首先,我们来分析下整个过程: 1.建立一个layout,包含一个EditText搜索框和一个ListView 2.创建一个数据集mData,用于ListView的Adapter的创建 3.添加EditText的文本改变的监听器 4.利用notifyDataSetChanged()动态更新ListView 第一步:创建一个搜索框 这个还是比较容易的,这

Android动画translate坐标图

X坐标图示: Y坐标图示:

关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法

在网上找了半天解决办法,也没有找到,在此共享我自己的一个问题,不具有普遍性,仅作参考! 问题描述:MATLAB调用xlsread函数出现问题,第一次运行的时候,出现服务器异常,再次运行能够正常读取数据: 在调用xlswrite函数时,一直出现服务器异常状况,不能将数据写入excel表格中. 问题关键:不是MATLAB的原因,问题出在excel软件上! 问题解决:xlswrite函数在调用时会占用excel的com端口,所以要保证在调用时这个端口是开放的,也就是没有被其他程序占用.打开excel(

MATLAB/Excel-如何将Excel数据导入MATLAB中

在使用MATLAB对矩阵进行数据处理时,为了方便编辑与修改,常常需要先将数据录入到Excel中,然后再将其导入到MATLAB中参与矩阵运算.本文在MATLAB 2013a和Office 2013环境下向大家演示如何将Excel数据导入到MATLAB中,其他版本的MATLAB.OFFICE方法大同小异,一起来看一下 工具/原料   Excel数据文件(格式xls或xlsx) MATLAB 7.x + 方法/步骤     将待导入的矩阵结构的数据录入Excel中,录入时注意行列要跟原矩阵一一对应  

MatLab Load cv::Mat 导入数据

我们有时候在项目中需要将OpenCV中的cv::Mat导入MatLab进行分析与处理,那么如果把数据转过去呢,我们的做法是首先将cv::Mat导出为txt文件,或者是yml文件,请参见我之前的博客Write cv::Mat to a file. 导出的txt文件可以直接load进MatLab,如果数据是多维数组的话,只需用reshape函数来修改下即可,参见代码如下: // If the size of 'im' is m by n by 3 data = load('im.txt'); dat

从Matlab .fig文件中读取数据,并重新绘图

Matlab提供了强大的函数集合,可以从.fig文件中读取图中的数据,并重新绘制图形.如果原始数据丢失,我们可以从.fig文件中恢复原始数据,并基于原始数据做进一步的处理. 以下是一个从两个不同文件中读取原始数据,并重新绘制图形的例子. h1 = openfig('1.fig','reuse'); % open figure D1=get(gca,'Children'); %get the handle of the line object XData1=get(D1,'XData'); %ge

Matlab生成二类线性可分数据

%% 生成二类线性可分数据 function [feature, category]=generate_sample(step,error) aa=3; %斜率 bb=3; %截距 b1=1; rr =error; s=step; x1(:,1) = -1:s:1; n = length(x1(:,1)); x1(:,2) = aa.*x1(:,1) + bb + b1 + rr*abs(randn(n,1)); y1 = -ones(n,1); x2(:,1) = -1:s:1; x2(:,2