Matlab使⽤笔记--显⽰动态数据游标
Matlab使⽤笔记–显⽰动态数据游标
利⽤Matlab控件text可以实现这个功能。
使⽤重点注意事项主要有两项
1. 控件坐标值必须为double
2. 控件的字符串必须为元胞数组,想要⼀次创建多个text控件需要注意,如果此时还要多⾏显⽰就要使⽤嵌套的元胞数组。但是如果是
只创建⼀个控件使⽤嵌套的元胞数组将会报错。
%举个会报错的例⼦
Str{1}={['x=0.1'],['y=0.1']};%1x1 cell
text(0.1,0.1,Str,'Color','r');
%然⽽这个例⼦就没有问题
Str{1}={['x=0.1'],['y=0.1']};%1x1 cell
Str{2}={['x=0.2'],['y=0.2']};%1x1 cell
text([0.1,0.2],[0.1,0.2],Str,'Color','r');
从上边我们可以看到需要对创建单个或多个控件进⾏区分。
运⾏上⼀段代码还可以看出text返回的是句柄数组。也就是说在修改text属性时需要单独对数组中的每⼀个handle进⾏修改。
删除控件可以使⽤delete()函数。
%例⼦
x = linspace(0,2*pi);%⽣成0-2pi的100个点
y = sin(x);
plot(x,y)
texthandles = text(pi,0.5,'This is a cell','Color','r');
keyboard;
控件的使用delete(texthandles)%删除刚刚的⽂本
clear texthandles;%在⼯作区中清除
修改text控件的Position属性就可以对text控件的位置进⾏修改。
修改text控件的String属性就可以对显⽰字符进⾏修改。
组合以上功能就可以完成动态显⽰游标的需求,演⽰代码如下:
(共计三个功能演⽰,显⽰单个数据,显⽰多个数据,动态显⽰数据)
%text使⽤笔记-显⽰动态数⽬数据游标
clc
clear
%⾸先⽣成实验⽤的曲线
x = linspace(0,2*pi);%⽣成0-2pi的100个点
y = sin(x);
plot(x,y)
texthandles = text(pi,0.5,'This is a cell','Color','r');
keyboard;
delete(texthandles)%删除刚刚的⽂本
clear texthandles;%在⼯作区中清除
x = linspace(0,2*pi,6);%⽣成0-2pi的6个点
y = sin(x);
for i = 1:length(x)
Str{i} = {['x=',num2str(x(i))],['y=',num2str(x(i))]};%Str必须为元胞数组,若要显⽰多⾏需要使⽤嵌套的元胞数组;
end
texthandles = text(x,y,Str,'Color','r');%x,y必须为double类型
keyboard;
delete(texthandles);%删除刚刚的⽂本
clear texthandles;%在⼯作区中清除
%如何动态向数据点添加说明
%以下⽤两种⽅式实现动态显⽰⽂本
detx = linspace(0,2*pi/5,5);
texthandles = text(0,0,'','Color','r');%x,y必须为double类型空的text
for i=1:5 %每次显⽰i个⽂本在原有基础上添加
Tempx = x(1:i)+detx(i);
Tempy = sin(Tempx);
if length(texthandles)<i
texthandles(length(texthandles)+1:i)= text(zeros(1,i-length(texthandles)),zeros(1,i-length(texthandles)),'','Color','r');%新建text
elseif length(texthandles)>i
delete(texthandles(i+1:length(texthandles)));%删除
texthandles(i+1:length(texthandles))=[];
end
for j=1:i
texthandles(j).String = '';%先清空全部
end
for j=1:i%给控件赋值
texthandles(j).Position = [Tempx(j),Tempy(j)];
texthandles(j).String = {['x=',num2str(Tempx(j))],['y=',num2str(Tempy(j))]};
end
pause(1);%暂停以⽅便观察
end
keyboard;
delete(texthandles);
clear texthandles;%在⼯作区中清除
for i=2:5 %每次显⽰i个⽂本在原有基础上添加
Tempx = x(1:i)+detx(i);
Tempy = sin(Tempx);
if i~=2
delete(texthandles);%删除旧控件
end
for j = 1:i
TempStr{j} = {['x=',num2str(Tempx(j))],['y=',num2str(Tempy(j))]};%Str必须为元胞数组,若要显⽰多⾏需要使⽤嵌套的元胞数组;
end
texthandles = text(Tempx,Tempy,TempStr,'Color','r');%此处若只有⼀个⽂本但是Str却使⽤了嵌套的元胞数组就会报错所以不推荐⽤这种⽅法 pause(1);%暂停以⽅便观察
end
⾮本⼈同意原创⽂章不得转载
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论