目录

  • 简介
  • 图形文件
  • 程序编写
    • Draw.m文件编写
    • Graph.m
      • 循环绘制
      • 保留绘制
  • 运行

简介

MATLAB的坐标区用于作为绘图区,绘制线段等,而当数据较多时,一般有3种选择以显示绘图:

  1. 舍去之前的数据,只绘制最后部分的数据:可以使图形比例不变
  2. 绘制所有数据:可以更好地看出数据总体趋势变化,但精确的点较难体现。

第2种方式不用多说,plot函数会自动调整坐标轴的长度,因此通过plot函数不断绘制即可,第1种方式又可以分为两种,单向绘制和循环绘制,单向绘制即数据指按时间顺序从左到右绘制,此时最左边的数据会最先被舍去,数据从最右边添加。循环绘制即绘制到图的最右边后,从坐标区的最左边开始绘制。

当然根据需求可能会有其它选择。

下面介绍循环绘制和绘制所有数据,两种绘制方法的MATLAB程序设计。

图形文件

创建1个简单的.fig文件,只有两个控件,按钮用来启动绘图,坐标区用来显示绘图。

程序编写

假设图形文件名为Draw.fig,那么对应放置各种回调函数的文件为Draw.m文件,此时除了这两个文件,我们还需要编写1个图形绘制文件Graph.m(当然,名字随意起),该文件为函数文件,用于被定时器调用时进行图形绘制(定时器下面会介绍怎么使用)。该文件的参数除了图形控件必须的参数handles外,应增加1个数据参数,传入需要绘制的数据。当然,一般不会将其设为函数的参数,而是将其设置为全局变量,方便数据的传入和使用。

注:本程序需要绘制的数据为已准备好的数据,因此通过定时器定时绘制。若需要绘制的数据为不定时传入的,可以取消定时器,转而每传入相应数量的数据,绘制1次。

Draw.m文件编写

首先将Draw_OpeningFcn函数修改为以下所示,主要是将Graph函数设置为定时器回调函数,以及准备好数据。

function Draw_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);global gPlayTimer;     %定时器变量,点击按钮后打开定时器启动绘制
global gDataCnt;       %计数器,存储绘制线段的x坐标
global Data_Draw;      %存放已绘制的数据
global Data_All;       %存放所有数据(即已准备好的数据)
global MAX_DATA_LEN;   %可绘制的最大数据数目gPlayTimer = timer('TimerFcn', {@Graph, handles}, 'Period', 0.01,... 'ExecutionMode', 'fixedDelay'); % 创建一个定时器对象,周期为10ms
gDataCnt=1;x_sin = 0:0.01:10*pi;
Data_All=sin(x_sin);  %准备好的数据MAX_DATA_LEN = length(x_sin);
Data_Draw= NaN(1, MAX_DATA_LEN);  %数组初始化

注意,MATLAB最低周期为0.001s,即1ms,但实际上误差比较大,一般将周期设置为0.009时周期约为10ms,可能与电脑有关。

其次,编写按钮的回调函数,用于开关定时器:

function pushbutton1_Callback(hObject, eventdata, handles)
global gPlayTimer;switch get(gPlayTimer, 'Running')   %获取定时器状态case 'off'start(gPlayTimer); % 如果定时器关闭,则打开定时器case 'on'stop(gPlayTimer); % 如果定时器开启,则关闭定时器
end

最后,建议在整个UI界面的DeleteFcn函数中添加定时器的删除函数,如下所示:

function figure1_DeleteFcn(hObject, eventdata, handles)
global gPlayTimer;switch get(gPlayTimer, 'Running')case 'on'stop(gPlayTimer); % 如果定时器打开,则关闭定时器
end
delete(gPlayTimer); % 删除定时器

Graph.m

在当前文件夹中添加函数文件Graph.m,并对应加入下面的代码即可。

循环绘制

function Graph(~,~,handles)global gDataCnt;  % 计数器
global Data_Draw;
global Data_All;
global MAX_DATA_LEN;Data_Draw(gDataCnt) = Data_All(gDataCnt);   %定时器每调用1次,获取1个数据xLeft  = 1 : gDataCnt; % 左半部分波形的横坐标
xRight = gDataCnt + 10 : MAX_DATA_LEN; % 右半部的波形的横坐标,有10个数据的间距
yLeft = Data_Draw(xLeft); % 左半部分波形的纵坐标
yRight = Data_Draw(xRight); % 右半部分波形的纵坐标% 绘制波形
plot(handles.axes1, xLeft, yLeft, xRight, yRight);
% 设置横坐标
set(handles.axes1, 'XLim', [1 MAX_DATA_LEN]);
drawnow; % 刷新屏幕gDataCnt = gDataCnt + 1;if (gDataCnt > MAX_DATA_LEN) % 循环绘制的重点,绘制完后,绘制位置变为最前gDataCnt = gDataCnt - MAX_DATA_LEN;
end

保留绘制

function Graph(~,~,handles)global gDataCnt;  % 计数器
global Data_All;
global MAX_DATA_LEN;
persistent y;             %y用于绘制曲线(类似Data_Draw,这里定义为静态变量防止被覆盖,不使用Data_Draw是因为该变量(数组)大小固定了)x  = 1 : gDataCnt; % 波形的横坐标y(gDataCnt) = Data_All(mod(gDataCnt,MAX_DATA_LEN)+1);  %+1:防止取余为0,导致数据索引出错% 绘制波形
plot(handles.axes1, x, y);% 设置横坐标
set(handles.axes1, 'XLim', [1 gDataCnt+10]);
drawnow; % 刷新屏幕gDataCnt = gDataCnt + 1;

运行

将Draw.m和Graph.m两个文件对应加上上述代码即可实现不同坐标区的绘制,当然,一般这种数据都是外部定时或不定时输入。根据该工程,定义全局变量Data_All,适当修改少量代码,应该就可以运行了。

刚开始绘制时,纵坐标轴的值会不断变化,则是由于坐标轴在适应绘制曲线的最大纵坐标,如果觉得绘制太慢了,可以将定时器周期调小一点(最小0.001)或者将每次显示的数据增多,本工程每次只显示1个。

MATLAB坐标区应用相关推荐

  1. MATLAB Appdesigner实用技巧(一):在App的坐标区显示自己建模的三维模型

    1. MATLAB App中显示3D模型 在很多项目中,我们需要在App中看到我们的模型.这就需要我们将我们在一些建模软件(例如solidworks)中建好的模型导入到app的坐标区当中.但是,MAT ...

  2. matlab的appdesigner坐标区画图,控件缩放

    在使用matlab的appdesigner时,我拖动了一个"坐标区"控件到界面上,而且不想要坐标轴,但是发现这个控件拖动的时候总是容易卡,而且边界总有一圈灰色的框又去不掉,影响布局 ...

  3. 【转】Matlab坐标修改及旋转

    转自http://blog.sina.com.cn/s/blog_531bb7630100y43v.html 和http://blog.sina.com.cn/s/blog_6399df820100t ...

  4. Matlab坐标图像隐藏横纵坐标的方法

    之前在一个技术群里发现有朋友询问Matlab坐标图中的坐标如何删除,笔者想了一下,压根就不需要删除,这里笔者给出一个隐藏横纵坐标的偏方. 首先,来看下图是我们需要隐藏横纵坐标的原图. 找到编辑=> ...

  5. matlab设坐标,关于Matlab坐标设置问题?

    1.绘制二维曲线的最基本函数plot 2.双纵坐标函数plotyy 3. 坐标控制 函数的调用格式为: axis([xmin xmax ymin ymax zmin zmax]) axis函数功能丰富 ...

  6. matlab坐标单位,Matlab画图让坐标轴单位长度相同

    让坐标轴单位长度相同 今天画开封铁塔的模拟图,代码如下: clc clear close all load A_1986 c1 = 1:8:104; c2 = 8:8:104; C = [c1;c2] ...

  7. matlab 坐标求函数表达式,Matlab---BP神经网络(获取数学表达式)

    前言 源代码 数据预处理分析 1 相关性分析 2 聚类分析 3 随机获取训练数据和预测数据集 4 对数据进行归一化 BP神经网络 1 BP神经网络结构本例 2 神经网络训练后权值和阈值查看 3 神经网 ...

  8. matlab变量区表示函数,MATLAB中的工作区,变量和函数

    本文概述 工作空间 工作区包含我们在MATLAB中工作时创建的所有变量. 每当我们为变量分配值时, 它都会自动在工作空间中获取空间. 关闭环境后, 工作空间变量将消失, 因此请将这些变量保存在文件中以 ...

  9. matlab连通区边界_Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI...

    本博客主要记录我学习运用matlab进行一些基本的图像处理的一些笔记,如果有不当的地方,欢迎批评指正,一起学习,一起进步. 本篇是第一篇,只涉及到一些基本的操作,涉及到的知识点如下: 1.二值化 2. ...

最新文章

  1. 物理光学1 波动方程与基础波函数
  2. 【leetcode】3 minstack
  3. PetShop之ASP.NET缓存
  4. sign python_python机器学习
  5. HarmonyOS之组件通用的XML属性总览
  6. GoogLeNet系列解读
  7. 工作七年,从实习生到测试主管,我认识到倾听对一个人有多重要!
  8. 最简单的视音频播放示例5:OpenGL播放RGB/YUV
  9. mysql 查询指定日期的上一周的最后一天
  10. maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)...
  11. 二维粒子群算法的matlab源程序,二维粒子群算法的matlab源程序
  12. kdj买卖指标公式源码_KDJ买卖副图指标 源码 通达信 贴图
  13. 如何开启计算机cpu虚拟化,电脑开启虚拟化设置的方法 如何开启虚拟化设置
  14. 数据血缘图谱升级方案设计与实现
  15. .Net core----使用容联云短信推送
  16. Xcode直接安装ipa
  17. HyperAttentionDTI:基于注意机制的序列深度学习改进药物-蛋白质相互作用预测
  18. vue 在线生成二维码 二维码生成背景下载
  19. Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)
  20. 大一学生《Web编程基础》期末网页制作 HTML+CSS+JavaScript 企业网页设计实例

热门文章

  1. 文本框获取焦点后出现的边框,怎么去掉
  2. 7-35 英文字母的大小写转换
  3. 无聊却很有意思的事情
  4. android 同根动画_[转载]Android anim动画切换效果
  5. java求最大公约数
  6. 桌面窗口管理器 GPU 3D 占用100% 的解决方法
  7. 大三第一次参加ACM ICPC Regional打了两块铁,怎么办?
  8. DQ坐标轴锁相环(pll)
  9. 长沙银河计算机中等职业学校图片,长沙银河中等职业学校
  10. 任务分配的穷举法、匈牙利法、分支定界法