[转载]Matlab中使用Plot函数动态画图方法总结

   2023-02-09 学习力0
核心提示:[转载]Matlab中使用Plot函数动态画图方法总结 (2012-12-31 23:26:18)[删除]转载▼标签: 转载分类: 技术相关原文地址:Matlab中使用Plot函数动态画图方法总结作者:gypsyMatlab中使用Plot函数动态画图方法总结Matlab除了强大的矩阵运算,仿真分析外,绘图

[转载]Matlab中使用Plot函数动态画图方法总结

 (2012-12-31 23:26:18)[删除]
标签: 

转载

分类: 技术相关

Matlab中使用Plot函数动态画图方法总结

Matlab除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大,静态画图没什么问题,由于Matlab本身的多线程编程缺陷,想要动态的画图,并且能够很好的在GUI中得到控制,还不是一件很容易的事情,下面总结几种方法。

一. AXIS 移动坐标系
    这种方法是最简单的一种方法,适合于数据已经全部生成的场合,先画图,然后移动坐标轴。实例代码如下:

  1. %%
  2. %先画好,然后更改坐标系
  3. %在命令行中 使用 Ctrl+C 结束
  4. t=0:0.1:100*pi;
  5. m=sin(t);
  6. plot(t,m);
  7. x=-2*pi;
  8. axis([x,x+4*pi,-2,2]);
  9. grid on
  10. while 1
  11. if x>max(t)
  12. break;
  13. end
  14. x=x+0.1;
  15. axis([x,x+4*pi,-2,2]); %移动坐标系
  16. pause(0.1);
  17. end
二. Hold On 模式
     
       此种方法比较原始,适合于即时数据,原理是先画上一帧,接着保留原始图像,追加下一幀图像,此种方式比较繁琐,涉及画图细节,并且没有完整并连续的Line对象数据。

   例如:

  1. %%
  2. % Hold On 法
  3. % 此种方法只能点,或者分段划线
  4. hold off
  5. t=0;
  6. m=0;
  7. t1=[0 0.1]; %要构成序列
  8. m1=[sin(t1);cos(t1)];
  9. p = plot(t,m,\'*\',t1,m1(1,:),\'-r\',t1,m1(2,:),\'-b\',\'MarkerSize\',5);   
  10. x=-1.5*pi;
  11. axis([x x+2*pi -1.5 1.5]);
  12. grid on;

  13. for i=1:100
  14.     hold on
  15.     t=0.1*i; %下一个点
  16.     m=t-floor(t);
  17.     t1=t1+0.1; %下一段线(组)
  18.     m1=[sin(t1);cos(t1)];
  19.     p = plot(t,m,\'*\',t1,m1(1,:),\'-r\',t1,m1(2,:),\'-b\',\'MarkerSize\',5);   
  20.     x=x+0.1;
  21.     axis([x x+2*pi -1.5 1.5]);
  22.     pause(0.01);
  23. end
三. Plot 背景擦除模式

      这种模式比较适合画动画,效率比较高,刷新闪烁小,适合即时数据,最终的Line结构数据完整。

      了解此方法之前要搞清楚 Plot函数的原型是什么: Plot函数,输入为 X-Y (-X)坐标元组、以及“属性”-“值对,输出为一个列向量(每条曲线岁对应的Line结构 Handle,每一行代表一个 线条的handles), 每一线条都有 XData,YData 向量。如果你画了2条线,那么会返回 2×1的向量。
重新画图不需要 重新书写 Plot,只需要 刷新图像即可,使用drawnow函数。

完整实例如下:

1. 画一个点的动画:

  1. %%
  2. %采用背景擦除的方法,动态的划点,并且动态改变坐标系
  3. % t,m 均为一行 ,并且不能为多行
  4. t=0;
  5. m=0;
  6. p = plot(t,m,\'*\',...
  7.    \'EraseMode\',\'background\',\'MarkerSize\',5);
  8. x=-1.5*pi;
  9. axis([x x+2*pi -1.5 1.5]);
  10. grid on;

  11. for i=1:1000
  12.     t=0.1*i;       %两个变量均不追加
  13.     m=sin(0.1*i);
  14.     set(p,\'XData\',t,\'YData\',m)
  15.     x=x+0.1;   
  16.     drawnow
  17.     axis([x x+2*pi -1.5 1.5]);
  18.     pause(0.1);
  19. end
 
2. 动态多条曲线(即时数据)
  1. %%
  2. %采用背景擦除的方法,动态的划线,并且动态改变坐标系
  3. % 多行划线

  4. t=[0]
  5. m=[sin(t);cos(t)]
  6. p = plot(t,m,...
  7.    \'EraseMode\',\'background\',\'MarkerSize\',5);
  8. x=-1.5*pi;
  9. axis([x x+2*pi -1.5 1.5]);
  10. grid on;


  11. for i=1:1000
  12.     t=[t 0.1*i];                   %Matrix 1*(i+1)
  13.     m=[m [sin(0.1*i);cos(0.1*i)]]; %Matrix 2*(i+1)
  14.     set(p(1),\'XData\',t,\'YData\',m(1,:))
  15.     set(p(2),\'XData\',t,\'YData\',m(2,:))   
  16.     drawnow
  17.     x=x+0.1;   
  18.     axis([x x+2*pi -1.5 1.5]);
  19.     pause(0.5);
  20. end

      上面的这几个画图方式的示例只是简单的for循环,是单线程的,如果是涉及到GUI的编程,那么请使用Timer来完成这件事情,Timer是我在Matlab中实现多线程唯一方法(没有找到别的方法)。

来源:http://www.matlabfan.com/thread-736-1-6.html

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 如何在Abaqus的python中调用Matlab程序
    目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误
    03-16
  • 如何将极坐标数据转换为笛卡尔坐标系并绘制[MATLAB]
    如何将极坐标数据转换为笛卡尔坐标系并绘制[MAT
    你想做的事考虑根据与原点的距离 $r$ 和 $xy$ 平面上的角度 $heta$ 绘制数据 $P(r, heta)$。例如,雷达获取的信号包含有关目标范围 $r$ 和方位角 $heta$ 的信息。就是下图。在本文中,$heta$ 是从 $x$ 轴测量的角度。显示示例考虑创建依赖于 $r, heta$ 的虚拟
    03-16
  • 【MATLAB与机械设计】一维优化进退法确定初始区间
    【MATLAB与机械设计】一维优化进退法确定初始区
    在讨论一维搜索时,首先保证搜索区间函数具有单峰性,也就是在区间[a,b]中函数是凸函数,对于求极小值问题,函数值具有高—低—高的特性,在区间[a,b]上有唯一的最小值。1,方法的建立2.进退法确定搜索区间的程序框图3,根据上述的程序框图,编写的MATLAB程序
    03-08
  • 用于微型四轮驱动的 6T 小齿轮原型和使用 MATLAB 的 FEM 结构分析
    用于微型四轮驱动的 6T 小齿轮原型和使用 MATLA
    介绍我使用迷你 4WD 套件使用 Raspberry Pi 制作机器人汽车。定制零件丰富且方便,因为它们在附近的商店很容易买到。但是,由于Mini 4WD的速度非常快,因此在低速时很难控制速度。因此,我使用 3D 打印机制作了自己的 6T 小齿轮,并尝试改变齿轮比。 成型小齿
    03-08
  • ROS与Matlab系列:一个简单的运动控制 基于matl
    转自:http://blog.exbot.net/archives/2594Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你
    02-10
  • matlab 遍历结构体struc的成员
    MATLAB中专门用于对结构数组的操作的函数并不多,通过 help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如表4.3.1所示。表4.3.1 结构数组的操作函数函数名             功能描述 deal                 把输入处
    02-09
  • 02-09
  • schroeder reverb matlab实现
    schroeder reverb matlab实现
    原理参考:Natural sounding artificial reverberation combFilter.m:function output = combFilter(delay, gain, input)fs = 48000;delaySample = int32(delayTime * fs / 1000);B = [1 zeros(1, delaySample - 1)];A=[1 zeros(1, delaySample - 2) -gain];
    02-09
  • C/C++中调用matlab引擎计算 matlab转c
    原帖地址:http://blog.sina.com.cn/s/blog_6adcb3530101cvot.html一,在linux环境使用matlab引擎必须先进行一些必要的配置1,matlab引擎依赖/bin/csh启动,所以不管你使用何种shell,都必须安装csh。**2,matlab引擎依赖的动态库文件目录必须在系统当前的
    02-09
  • MATLAB 图像放大/缩小,双线性插值
    MATLAB 图像放大/缩小,双线性插值
    半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 1 close all; 2 clear all; 3 clc; 45 m=1.8;%放大或缩小的高度 6 n=2.3;%放大或缩小的宽度 7
    02-09
点击排行