MATLAB坐标区应用
目录
- 简介
- 图形文件
- 程序编写
- Draw.m文件编写
- Graph.m
- 循环绘制
- 保留绘制
- 运行
简介
MATLAB的坐标区用于作为绘图区,绘制线段等,而当数据较多时,一般有3种选择以显示绘图:
- 舍去之前的数据,只绘制最后部分的数据:可以使图形比例不变
- 绘制所有数据:可以更好地看出数据总体趋势变化,但精确的点较难体现。
第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坐标区应用相关推荐
- MATLAB Appdesigner实用技巧(一):在App的坐标区显示自己建模的三维模型
1. MATLAB App中显示3D模型 在很多项目中,我们需要在App中看到我们的模型.这就需要我们将我们在一些建模软件(例如solidworks)中建好的模型导入到app的坐标区当中.但是,MAT ...
- matlab的appdesigner坐标区画图,控件缩放
在使用matlab的appdesigner时,我拖动了一个"坐标区"控件到界面上,而且不想要坐标轴,但是发现这个控件拖动的时候总是容易卡,而且边界总有一圈灰色的框又去不掉,影响布局 ...
- 【转】Matlab坐标修改及旋转
转自http://blog.sina.com.cn/s/blog_531bb7630100y43v.html 和http://blog.sina.com.cn/s/blog_6399df820100t ...
- Matlab坐标图像隐藏横纵坐标的方法
之前在一个技术群里发现有朋友询问Matlab坐标图中的坐标如何删除,笔者想了一下,压根就不需要删除,这里笔者给出一个隐藏横纵坐标的偏方. 首先,来看下图是我们需要隐藏横纵坐标的原图. 找到编辑=> ...
- matlab设坐标,关于Matlab坐标设置问题?
1.绘制二维曲线的最基本函数plot 2.双纵坐标函数plotyy 3. 坐标控制 函数的调用格式为: axis([xmin xmax ymin ymax zmin zmax]) axis函数功能丰富 ...
- matlab坐标单位,Matlab画图让坐标轴单位长度相同
让坐标轴单位长度相同 今天画开封铁塔的模拟图,代码如下: clc clear close all load A_1986 c1 = 1:8:104; c2 = 8:8:104; C = [c1;c2] ...
- matlab 坐标求函数表达式,Matlab---BP神经网络(获取数学表达式)
前言 源代码 数据预处理分析 1 相关性分析 2 聚类分析 3 随机获取训练数据和预测数据集 4 对数据进行归一化 BP神经网络 1 BP神经网络结构本例 2 神经网络训练后权值和阈值查看 3 神经网 ...
- matlab变量区表示函数,MATLAB中的工作区,变量和函数
本文概述 工作空间 工作区包含我们在MATLAB中工作时创建的所有变量. 每当我们为变量分配值时, 它都会自动在工作空间中获取空间. 关闭环境后, 工作空间变量将消失, 因此请将这些变量保存在文件中以 ...
- matlab连通区边界_Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI...
本博客主要记录我学习运用matlab进行一些基本的图像处理的一些笔记,如果有不当的地方,欢迎批评指正,一起学习,一起进步. 本篇是第一篇,只涉及到一些基本的操作,涉及到的知识点如下: 1.二值化 2. ...
最新文章
- 物理光学1 波动方程与基础波函数
- 【leetcode】3 minstack
- PetShop之ASP.NET缓存
- sign python_python机器学习
- HarmonyOS之组件通用的XML属性总览
- GoogLeNet系列解读
- 工作七年,从实习生到测试主管,我认识到倾听对一个人有多重要!
- 最简单的视音频播放示例5:OpenGL播放RGB/YUV
- mysql 查询指定日期的上一周的最后一天
- maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)...
- 二维粒子群算法的matlab源程序,二维粒子群算法的matlab源程序
- kdj买卖指标公式源码_KDJ买卖副图指标 源码 通达信 贴图
- 如何开启计算机cpu虚拟化,电脑开启虚拟化设置的方法 如何开启虚拟化设置
- 数据血缘图谱升级方案设计与实现
- .Net core----使用容联云短信推送
- Xcode直接安装ipa
- HyperAttentionDTI:基于注意机制的序列深度学习改进药物-蛋白质相互作用预测
- vue 在线生成二维码 二维码生成背景下载
- Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)
- 大一学生《Web编程基础》期末网页制作 HTML+CSS+JavaScript 企业网页设计实例