目录

  • 简介
  • 图形文件
  • 程序编写
    • 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. TextField输入结束后让键盘消失的两个技巧
  2. idea中 maven打包时时报错User setting file does not exist C:\Users\lenevo\.m2\setting.xml,
  3. python定义map数据_「每日一练」巧用Python处理列表中的数据
  4. 一些VC++ 系统类通用类
  5. Python69个内置函数分类总结
  6. java统计各空气质量最大值_空气质量历史数据分析
  7. HTML的相关路径与绝对路径的问题---通过网络搜索整理
  8. 二叉搜索树的公共祖先,二叉树的最近公共祖先
  9. zabbix 3.0 监控mysql_Zabbix-3.0.3 使用自带模板监控 MySQL
  10. IntelliJ IDEA汉化解决方案教程
  11. (保姆式教程:从下数据到画图)python如何利用EOF分析SSTA海温异常现象并画图
  12. CMS的碎片解决方案
  13. 计算机x线断层扫描英文缩写,计算机X线断层扫描
  14. 转x电容和y电容的区别
  15. springboot大学校园网上图书馆信息管理系统的设计与实现小程序毕业设计源码091535
  16. 【无标题】我们的三周年————致我的小宝贝
  17. google protobuf源码分析1
  18. Pycharm中c、m、F、f、v、p分别代表什么含义
  19. 桌面一片空白(不显示图标)的盗号木马清除指南
  20. python爬取网页表格数据匹配_爬取表格类网站数据并保存为excel文件

热门文章

  1. declval 的说明
  2. 【宏定义】#define 的使用方法
  3. 街舞中的rolling机器人_这,就是街舞中的那些“Swag”十足的舞蹈类型,你了解吗?...
  4. 状态机(FSM)的分类描述
  5. 理解Sortino索提诺比率及Python实现
  6. 用 Python 在股票交易中实现布林带策略
  7. Unity 接入百度AI - 通用物体和场景识别
  8. 全局壁纸美化v3.0安卓版
  9. 《转载》o(1), o(n), o(logn), o(nlogn) 是什么含义?
  10. java从邮箱获取邮件_javaMail正确读取邮箱内容的方式